JavaScript'te Nesne Yönelimli Programlama yaptıysanız, aşağıdaki gibi bir sınıf oluşturabileceğinizi bileceksiniz:
Person = function(id, name, age){
this.id = id;
this.name = name;
this.age = age;
alert('A new person has been accepted');
}
Şimdiye kadar sınıf insanımızın sadece iki özelliği var ve ona bazı yöntemler vereceğiz. Bunu yapmanın temiz bir yolu, 'prototip' nesnesini kullanmaktır. JavaScript 1.1'den başlayarak, prototip nesnesi JavaScript'te tanıtıldı. Bu, bir nesnenin tüm örneklerine özel özellikler ve yöntemler ekleme sürecini basitleştiren yerleşik bir nesnedir. Aşağıdaki gibi 'prototip' nesnesini kullanarak sınıfımıza 2 yöntem ekleyelim:
Person.prototype = {
wake_up: function() {
alert('I am awake');
},
get_age: function() {
return this.age;
}
}
Şimdi sınıf Kişimizi tanımladık. Kişiden bazı özellikleri devralan Manager adında başka bir sınıf tanımlamak istersek ne olur? Yönetici sınıfımızı tanımladığımızda tüm bu özellikleri yeniden tanımlamanın bir anlamı yok, onu sadece Person sınıfından miras alacak şekilde ayarlayabiliriz. JavaScript'in yerleşik mirası yoktur, ancak kalıtımı uygulamak için aşağıdaki gibi bir teknik kullanabiliriz:
Inheritance_Manager = {};
// Bir miras yöneticisi sınıfı oluşturuyoruz (isim keyfi)
Şimdi miras sınıfımıza baseClass ve subClassas argümanlarını alan ext adında bir yöntem verelim. Extend yöntemi içinde, miras işlevi miras () {} adında bir iç sınıf oluşturacağız. Bu iç sınıfı kullanmamızın nedeni, baseClass ve subClass prototipleri arasındaki karışıklığı önlemektir. Daha sonra, miras sınıfımızın prototipini aşağıdaki kodda olduğu gibi baseClass prototipine işaret ediyoruz: miras.prototype = baseClass. prototip; Daha sonra miras prototipini aşağıdaki gibi alt sınıf prototipine kopyalıyoruz: subClass.prototype = new inheritance (); Sonraki şey, alt sınıfımız için yapıcıyı şu şekilde belirtmektir: subClass.prototype.constructor = subClass; Alt sınıf prototiplememizi bitirdikten sonra, bazı temel sınıf işaretçileri ayarlamak için sonraki iki kod satırını belirleyebiliriz.
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
İşte uzatma fonksiyonumuzun tam kodu:
Inheritance_Manager.extend = function(subClass, baseClass) {
function inheritance() { }
inheritance.prototype = baseClass.prototype;
subClass.prototype = new inheritance();
subClass.prototype.constructor = subClass;
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
}
Artık mirasımızı uyguladığımıza göre, onu sınıflarımızı genişletmek için kullanmaya başlayabiliriz. Bu durumda, Kişi sınıfımızı aşağıdaki gibi bir Yönetici sınıfına genişleteceğiz:
Yönetici sınıfını tanımlıyoruz
Manager = function(id, name, age, salary) {
Person.baseConstructor.call(this, id, name, age);
this.salary = salary;
alert('A manager has been registered.');
}
Onu kişiden miras almasını sağlarız
Inheritance_Manager.extend(Manager, Person);
Fark ettiyseniz, Inheritance_Manager sınıfımızın ext yöntemini çağırdık ve bizim durumumuzda subClass Manager'ı ve ardından baseClass Person'u geçtik. Burada sıranın çok önemli olduğunu unutmayın. Onları değiştirirseniz, miras hiç de istediğiniz gibi çalışmayacaktır. Ayrıca, alt sınıfımızı gerçekten tanımlamadan önce bu kalıtımı belirtmeniz gerekeceğini unutmayın. Şimdi alt sınıfımızı tanımlayalım:
Aşağıdaki gibi daha fazla yöntem ekleyebiliriz. Manager sınıfımız, ondan miras aldığı için her zaman Person sınıfında tanımlanan yöntemlere ve özelliklere sahip olacaktır.
Manager.prototype.lead = function(){
alert('I am a good leader');
}
Şimdi test etmek için, biri Kişi sınıfından ve diğeri miras alınan sınıf Yöneticisinden olmak üzere iki nesne oluşturalım:
var p = new Person(1, 'Joe Tester', 26);
var pm = new Manager(1, 'Joe Tester', 26, '20.000');
Şu adresten tam kod ve daha fazla yorum almaktan çekinmeyin:
http://www.cyberminds.co.uk/blog/articles/how-to-implement-javascript-inheritance.aspx