SORU
25 EKİM 2010, PAZARTESİ


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
25 EKİM 2010, PAZARTESİ


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 FooFoo 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dom Esposito

    Dom Esposito

    26 Mayıs 2011
  • Michael Neal

    Michael Neal

    2 Mayıs 2009
  • TechnoBuffalo

    TechnoBuffal

    8 HAZİRAN 2007