Ne Javascript önemi özelliği yapıcı?
Javascript etrafta Başkanı tarafından bükmeye çalışmak OO...ve diğerleri gibi, constructor
özelliği hakkında karışıklık içine çalışan. Özellikle, constructor
özelliğinin önemi, bunu yapmak için görünmüyor olabilir gibi herhangi bir etkisi yoktur. E. g.:
function Foo(age) {
this.age = age;
}
function Bar() {
this.name = "baz";
}
Bar.prototype = new Foo(42);
var b = new Bar;
alert(b.constructor); // "Foo". That's OK because we inherit `Foo`'s prototype.
alert(b.name); // "baz". Shows that Bar() was called as constructor.
alert(b.age); // "42", inherited from `Foo`.
Yukarıdaki örnekte, bu nesne b
yapıcı (Bar
) - var gibi görünüyor; ve Foo
yaş özelliği devralır. Neden pek çok insan gerekli bir adım olarak öneriyoruz:
Bar.prototype.constructor = Bar;
Açıkça, 9* *hakkı yapıcıoldub
, ne etkisi bu prototip özelliği var mı? yani oluştururken denir Benim merak etmiyor musun ne pratik fark aslında yapar için yapıcı özelliğini ayarlamak 'doğru'olarak göremiyorum o sahip herhangi bir etkisi olan kurucu olur aslında aradıktan sonra bir nesne oluşturulur.
CEVAP
Birinci adım constructor
prototype
tüm hakkında ne olduğunu anlamak için. Zor değil, ama bir "klasik anlamda. miras bırakmak vardır
Kurucu
constructor
özelliğideğilbakabilirsin bunun dışında programda herhangi bir özel efektler, operatör new
nesne oluşturmak için birlikte kullanılan. Eğer new Bar()
yazdınız ve yazdığınız new Foo
Foo
olacak Bar
olacak.
Prototip
prototype
özelliği söz konusu nesne özelliği için sordum yok durumunda arama için kullanılır. x
arasında attr
bulmaya çalışır JavaScript x.attr
, sen yaz'In öznitelikleri. Onu bulmak cant, x.__proto__
bakar. Eğer orada da yoksa x.__proto__.__proto__
__proto__
tanımlı olduğu sürece bakacağız.
__proto__
ve prototype
ile ilgisi ne var? Kısa bir süre koymak, prototype
"türleri __proto__
için ise" "örnekleri". (Gerçekten türleri ve örnekleri arasında hiçbir fark yok çünkü tırnak işaretleri ile söylüyorum). Ne x = new MyType()
, (diğer şeyler arasında) yazarken x.__proto___
32 ** için ayarlanır.
Soru
Şimdi, yukarıdaki kendi örnek ne demek türetmek, ama denemek ve gerçek sorunun cevabı sizin için yeterli olacaktır; "neden bir şey gibi yazmak":
Bar.prototype.constructor = Bar;
Ben şahsen hiç görmedim ve ben bulmak biraz saçma, ama bağlamında gösterdin olacak demek ki Bar.prototype
-nesne (oluşturulan kullanarak new Foo(42)
) poz olarak var olmanın yarattığı Bar
yerine Foo
. Sanırım bu fikir biraz benzer bir şey yapmak için C /Java/C#gibi dilleri bir tür-arama (constructor
özelliği) her zaman verim en özel türü yerine türü daha genel nesne daha yukarı prototip zinciri.
Benim tavsiyem: "" JavaScript. miras hakkında çok fazla düşünme Arayüzleri ve mixins kavramlarını daha mantıklı. Ve kendi türleri için nesneleri kontrol etme. Gerekli özellikleri yerine ("bir ördek gibi yürüyorsa, ördek gibi bağırır, ördek") kontrol edin.
Tüm yukarıda açıklandığı gibi prototip mekanizması olduğu zaman klasik kalıtım modeli, içine JavaScript zorluyor karışıklığa neden olur. Elle constructor
-özellik ayarlamak için önerilen birçok kişi muhtemelen bunu yapmaya çalıştı. Soyut güzel ama yapıcı özelliği bu kılavuzu atama JavaScript çok deyimsel kullanım değildir.
nasıl css özelliği ve javascript kulla...
Javascript olsun değeri veya özelliği ...
Neden't tarayıcıları başka bir ke...
Bir dizi `length` özelliği okuma gerçe...
Javascript tarayıcıda bir önceki sayfa...