Latar belakang cepat: Dalam JavaScript, fungsi konstruktor untuk setiap jenis objek memiliki prototype
properti. The prototype
mengacu pada sebuah objek yang masing-masing dibangun menggunakan objek sebagai langkah berikutnya dalam rantai prototipe. Saat Anda ingin satu tipe melekat dari tipe lain, Anda bisa mengatur prototype
tipe anak ke instance baru dari tipe induk.
Sebagai contoh:
var Parent = function() { /* constructor business */ }
Parent.prototype.parentProp = "some parent property";
var Child = function() { /* constructor business */ }
Child.prototype = /*** !! Some prototype object goes here !! ***/
Pertanyaan saya bertanya tentang kode apa yang harus ada di tempat " Some prototype object goes here
" di kode di atas. Naluri pertama saya adalah membuat turunan dari induknya (yaitu, new Parent()
), tetapi dalam komentar untuk jawaban pada Apakah ini cara yang aman untuk menyalin satu objek prototipe ke yang lain? , satu pengguna menulis:
Tidak, jangan gunakan
new bar()
untuk objek prototipe!
(... yang merupakan pendapat yang telah saya lihat di banyak jawaban dan komentar SO, tetapi ini adalah satu-satunya contoh yang saya miliki saat ini.)
Opsi lainnya adalah menggunakan Object.create(Parent.prototype)
sebagai Child.prototype
. Sejauh yang saya tahu, ini juga menciptakan Parent
contoh baru , tetapi tidak menjalankan Parent
konstruktor.
Adakah yang bisa menjelaskan mengapa menjalankan fungsi konstruktor harus dihindari ketika membuat objek prototipe dari tipe induk? Apakah ada beberapa masalah teknis signifikan yang muncul (mungkin dengan berbagai tingkat warisan)? Atau apakah pola seperti itu merupakan penyalahgunaan konstruktor yang bertentangan dengan beberapa praktik terbaik prototipikal (misalnya, menjalankan konstruktor saat membuat prototipe melanggar beberapa pemisahan perhatian)?
Object.create
diterapkannya.