Javascript Prototype ve Object.create Kullanımı

nhtctn nhtctn

Daha önceki derslerimizden constructor’ın ne olduğuna değinmiştik.

Aşağıda ise bir örneği mevcut.

let Person = function (name, yearOfBirth, job) {
    this.name = name;
    this.yearOfBirth = yearOfBirth;
    this.job = job;
    this.calculateAge = function () {
         return 2020 - this.yearOfBirth;
     }

}

Şimdi gelelim asıl konumuza prototype’ın ne olduğuna ve ne işe yaradığına bakalım.

Javascript’te kalıtım prototype aracılığıyla yapılıyor. Yukarıdaki constructor’ımızda calculateAge adında bir fonksiyon bulunmakta. Biz her instance aldığımızda bu fonksiyonumuz diğer nesnelere aktarılmış oluyor bu da kompleks projelerde ram da gereksiz bir alan kaplayacaktır. Bunun için şöyle bir yapı izlenebiliriz.

let Person = function (name, yearOfBirth, job) {
    this.name = name;
    this.yearOfBirth = yearOfBirth;
    this.job = job;
}

Aşağıda şunu demiş oluyoruz Person nesnesinin prototyope kısmına calculateAge fonksiyonunu ekle.

Person.prototype.calculateAge = function () {

    return 2020 - this.yearOfBirth;
}

Bu şekilde yaptığımızda Person’dan her instance alan nesnelerde bulunmayacaktır ama persondan kalıtım aldıkları için erişim sağlayabilceklerdir.

Object.Create

Bir obje oluştururken prototype’ini başka bir objeden almamızı sağlar.

Burada Person isminde constructor fonksiyonumuz bulunmakta ve prototype kısmında bulunan 1 tane fonksiyonu vardır.

let Person = function (name, yearOfBirth, job) {
    this.name = name;
    this.yearOfBirth = yearOfBirth;
    this.job = job;
    
}

Person.prototype.calculateAge = function () {

    return 2020 - this.yearOfBirth;
}

Diğer bir nesnemiz ise Teacher nesnesidir. Bu nesnenemizin prototype kısmında bir şey yazmadık. Yukarıdaki person nesnemizde bulunan prototype’ları teacher’a aktarmak istiyoruz.

let Teacher = function (name, yearOfBirth, job, subject) {
    Person.call(this, name, yearOfBirth, job);//burada person nesnesinin kullanmak istediğimiz property'lerini miras alıyoruz.
    this.subject = subject;
}

Bunun için aşğıdaki object.create fonksiyonu imdadımıza yetişiyor. Bu sayede teacher nesnesi artık calculateAge fonksiyonunu kullanabilecektir.

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

Yukarıdaki işlemi yaparken Teacher ile Person constructor kısmı eşitleniyor bunu düzeltmek için aşağıdaki eşitlemeyi yapmamız gerekiyor.

//set Teacher constructor
Teacher.prototype.constructor = Teacher;

Yorum yazın

BENZER YAZILAR