Hızlı arka plan: JavaScript'te, her nesne türü için yapıcı işlevinin bir prototype
özelliği vardır. Bu prototype
, her bir yapılandırılmış nesnenin, prototip zincirinde bir sonraki adım olarak kullandığı bir nesneyi ifade eder. Bir türün başka bir türden içsel olmasını istediğinizde prototype
, alt türün üst türünün yeni bir örneğine ayarlayabilirsiniz .
Örneğin:
var Parent = function() { /* constructor business */ }
Parent.prototype.parentProp = "some parent property";
var Child = function() { /* constructor business */ }
Child.prototype = /*** !! Some prototype object goes here !! ***/
Benim sorum Some prototype object goes here
yukarıdaki kod " " yerinde hangi kod gitmek gerektiğini sorar . İlk içgüdüm, ebeveynin bir örneğini (yani, new Parent()
) oluşturmak, ancak bir cevabın yorumunda bu, bir nesne prototipini diğerine kopyalamanın güvenli bir yolu mu? , bir kullanıcı şunu yazar:
Hayır,
new bar()
prototip nesnesi için kullanmayın !
(... bu, birçok SO yanıtı ve yorumunda gördüğüm bir görüş, ancak şu anda elimde olan tek örnek bu.)
Diğer seçenek kullanıma etmektir Object.create(Parent.prototype)
olarak Child.prototype
. Bildiğim kadarıyla, bu da yeni bir Parent
örnek oluşturur , ancak yapıcıyı çalıştırmaz Parent
.
Birisi üst türden bir prototip nesnesi oluştururken yapıcı işlevini çalıştırmaktan neden kaçınılması gerektiğini açıklayabilir mi? Ortaya çıkan önemli bir teknik sorun var mı (belki birden fazla miras ile)? Ya da böyle bir model, bazı prototipik en iyi uygulamalarla çatışan kurucuların yanlış kullanımı mıdır (örneğin, bir prototip oluştururken kurucuyu çalıştırmak endişelerin ayrılmasını ihlal eder)?
Object.create
uygulanmaktadır.