var soru, belki biraz sıradışı, bir fonksiyonun prototip hakkında, bu kodu görmek ve konsol çıkışını temsil eden yorumları dikkat:anlayış fonksiyon prototip ve __proto__
function Foo() {
};
var o = Foo.prototype;
console.log(o.__proto__); // Object {}
console.log(o.constructor); // function Foo() {}
console.log(o.__proto__.constructor); // function Object() { [native code] }
console.log(o.__proto__.constructor === o.constructor); // false
Lütfen Standart getPrototypeOf()
yerine __proto__
kullanıyorum.
Son satırın neden false
çıktısını bulmaya çalışıyorum. Biz genellikle herhangi aşağıdaki nesne için doğru olduğunu biliyoruz:
obj.__proto__.constructor === obj.constructor
bu o
çok bir nesnedir yukarıdaki o
durumunda değil anlamak için bekliyorum. o
aslında bir işlevin prototip örneği (Foo.prototype
) ve bu nedenle Foo
kurulumu sırasında Foo
için o.constructor
set alır çünkü yanlış ise
merak ediyorum.
Bunun çok kullanışlı bir yardımcı programın bulunmadığını biliyorum, ancak bazı şeyleri anlamakta fayda var.
"* Genelde aşağıdaki her nesne için doğru olduğunu biliyoruz:' obj .__ proto __. Constructor === obj.constructor' * "- kendi' .constructor' özelliği olmayan herhangi bir nesne, yani. Ve 'Foo.prototype' * *,' Foo'ya işaret eden, kendi 'kurucu' özelliği vardır. – Bergi
@Bergi herhangi bir nesne bence bir 'kurucu' özelliği var. 'Constructor' özelliğine sahip 'Object.prototype' öğesinden 'devralındı'. Ne demek istediğinden emin değilim, eğer biraz detaylandırırsan, bu yararlı olur, teşekkürler. –
Kalıtsal olmayanları değil, kendi özelliklerini kastediyorum. Ve 'Object.prototype' öğesinden devralmayan nesneler bile oluşturabilir, böylece bir '.constructor' özelliği olmaz (Object.create (null)' '' '' constructor '' (false) – Bergi