Şu anda StackOverflow'taki makalelerin çoğuna rağmen, prototiplerle gerçekten çok karıştım..prototype ve [[prototype]]. Neden .prototype boş bir nesne?
function Foo() {
}
Foo.prototype.speak = function() {
console.log('Foo');
};
function Bar() {
}
console.log(Bar.prototype); // {}
Bar.prototype = Object.create(Foo.prototype);
console.log(Bar.prototype); // {} ----- (1)
Bar.prototype.speak = function() { // ----------(2)
console.log('Bar');
};
console.log(Bar.prototype); // { speak: [Function] } ----- (3)
Soru:
1) neden Object.create
sonra (1) boş amacıdır. speak method
ile Foo
arasındaki bir nesneyi dönüştürmemeli mi?
2) Gerçekten ne değiştiriyorum (2) ?? Bar
nesnesi veya prototype
nesnesi? Gerçekte ne oluyor?
3) Ne oluyor (3).
4) [[prototip]] tüm bunlarla nasıl ilişkilidir? Bildiğim şey, [[prototype]], geçerli nesne bir özellik içermiyorsa, aramak için kullanılır.
Emin olmak için .prototype !== [[prototype]]
ama [[prototype]] === __proto__
?
Bu bir kopya ise üzgünüz. Çünkü benzer sorulara rağmen bu sorulara cevap veremiyorum.
Object.create bir nesneyi kopyalamaz, ilettiğiniz nesneye atanmış prototip ile bir tane oluşturur. Eğer '(yeni Bar())' yı çağırmayı denerseniz. Speak(); 'sonra (1) iş (ve çıktı "Foo") Prototip zinciriniz, düşündüğünüz yerden kaldırılmış bir nesnedir. Console.log (Bar.prototype.prototype) ' – david
'u deneyin. Ne gördüğünüzü açıklamanın diğer bir yolu da, konsol.log'un prototip zincirinde bulunabilecek tüm özellikleri/yöntemi değil, yalnızca nesnenin' ownProperties'ini çıkarmasıdır. . Tüm zincirin görüntülenmesini isterseniz kendi kayıt fonksiyonunuzu yazın. – GameAlchemist