SORU
10 Aralık 2011, CUMARTESİ


Neden prototip kurucu ayarlamak için gerekli mi?

section about inheritance in the MDN article Introduction to Object Oriented Javascript prototip hazırladılar fark ettim.kurucu:

// correct the constructor pointer because it points to Person
Student.prototype.constructor = Student;  

Bu önemli bir amaca hizmet ediyor mu? Onu ihmal etmek olur mu?

CEVAP
10 Aralık 2011, CUMARTESİ


Her zaman gerekli değil, ama işe yarıyor. Person temel sınıf bir kopya yöntemi yapmak istediğimizi varsayalım. Bu gibi:

// define the Person Class  
function Person(name) {
    this.name = name;
}  

Person.prototype.copy = function() {  
    // return new Person(this.name); // just as bad
    return new this.constructor(this.name);
};  

// define the Student class  
function Student(name) {  
    Person.call(this, name);
}  

// inherit Person  
Student.prototype = Object.create(Person.prototype);

Şimdi Student yeni bir kopya yaratırsak ne olur?

var student1 = new Student("trinth");  
console.log(student1.copy() instanceof Student); // => false

Kopya Student değil bir örneğidir. Bu açık Çek olmadan), "" sınıf. taban Student bir kopyasını döndürmek için hiçbir biçimde olurdu çünkü Sadece Person geri dönüş yapabiliriz. Eğer olsaydı ancak, kurucu sıfırlama:

// correct the constructor pointer because it points to Person  
Student.prototype.constructor = Student;

...o zaman her şey beklendiği gibi çalışıyor

var student1 = new Student("trinth");  
console.log(student1.copy() instanceof Student); // => true

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • Joseph Hayhoe

    Joseph Hayho

    20 Mayıs 2010
  • Shanice Caruthers

    Shanice Caru

    27 EKİM 2011

İLGİLİ SORU / CEVAPLAR