+1 oy
Javascript kategorisinde (560 puan) tarafından soruldu

Javascriptte kalıtım konusunu çalışıyorum ve Prototype tabanlı kalıtımda prototype constructor'ının eşitlenmesi olayını anlayamadım ? Örnek olarak;

function Person(firstName,lastName) {
    this.firstName = firstName;
    this.lastName = lastName; 
}


function Customer(firstName,lastName,phone,membership) {
    Person.call(this,firstName,lastName); // Person Constructor'ını çağır

    this.phone = phone;
    this.membership = membership;


}

Customer.prototype = Object.create(Person.prototype);

Customer.prototype.constructor = Customer; // Bu kısmı anlayamadım. Neden Gerekli ? 

const customer1 = new Customer("Hayri","Serden","555-555-5555","Full");

Neden illaki constructor'ını Customer yapıyoruz ? Gerçekten gerekli mi ? 

Şimdiden teşekkürler.

 

2 Cevaplar

+1 oy
(6.5k puan) tarafından cevaplandı
tarafından düzenlendi

Merhaba Hayri,

İlk başlarda kafa karıştıran bir konsept. Zaten Prototype bile başlı başına farklı bir olay olduğu için kafa karışıklığı olmuş olabilir. Aslında vereceğim cevap : Her zaman gerekli değil!

Sen aslında prototype'ı inherit ettiğin zaman Person constructor'ını da alıyorsun. 

Senin örneğin üzerinden gidecek olursak şöyle bir örnek düşünelim.

function Person(name) {
    
    this.name= name; 
}

Person.prototype.copy = function(){

      // Bu metodun amacı bir objeyi direk olarak kopyalamak
      return new this.constructor(this.name);
}
function Customer(name) {
    Person.call(this,name); // Person Constructor'ını çağır

}

Customer.prototype = Object.create(Person.prototype);

// Customer.prototype.constructor = Customer;

const customer1 = new Customer("Hayri");

console.log(customer1);

console.log(customer1.copy() instanceof Customer); // False
console.log(customer1.copy() instanceof Person); // True

Aslında burada Customer kopyalamamız gerekirken Person kopyalıyoruz. Bunun önüne geçmek için kendi constructorımızı kullanmak istediğimizi söylememiz gerekmektedir.

Customer.prototype.constructor = Customer;

Ancak dediğim gibi sadece bu durumlarda elzem olmuş oluyor.

Alıntı : https://stackoverflow.com/questions/8453887/why-is-it-necessary-to-set-the-prototype-constructor

0 oy
(1.4k puan) tarafından cevaplandı
Dostum bunu öğrenmek yerine yeni Javascript standarlarını öğrensen daha iyi olur diye düşünüyorum. (EC6  falan.)
(6.5k puan) tarafından yorumlandı
Merhaba Emre. Aslında işin temelini öğrenmek için bunu bilmek gerekiyor. Sonuçta ES6 sadece bir standart. Temel söz dizimi olarak farklılık getiriyor. Oysa ES6 sınıfları da yine bu mantığı kullanıyor.
(1.4k puan) tarafından yorumlandı
Evet, o açıdan haklısınız, temelini öğrenmekte önemli.
Yazılım Biliminin Soru Cevap Platformuna hepiniz hoşgeldiniz. Bu platformda kurallara uyarak diğer geliştiricilerle yardımlaşabilirsiniz.

Kategoriler

...