JavaScript'te sınıflarınız yoktur, ancak kalıtım ve davranışın birçok şekilde yeniden kullanılmasını sağlayabilirsiniz:
Sözde klasik kalıtım (prototipleme yoluyla):
function Super () {
this.member1 = 'superMember1';
}
Super.prototype.member2 = 'superMember2';
function Sub() {
this.member3 = 'subMember3';
//...
}
Sub.prototype = new Super();
newOperatörle birlikte kullanılmalıdır :
var subInstance = new Sub();
İşlev uygulaması veya "yapıcı zinciri oluşturma":
function Super () {
this.member1 = 'superMember1';
this.member2 = 'superMember2';
}
function Sub() {
Super.apply(this, arguments);
this.member3 = 'subMember3';
}
Bu yaklaşım aynı zamanda newoperatörle birlikte kullanılmalıdır :
var subInstance = new Sub();
İlk örnekle fark ne zaman olduğunu yapıcı nesne içine , bu tahsis özellikler ekler üzerinde doğrudan yeni örneği, örneğin özelliklerini içeren ve direkt olarak ( ).applySuperthisSubthisSupersubInstancemember1member2subInstance.hasOwnProperty('member1') == true;
İlk örnekte, bu özelliklere prototip zinciri aracılığıyla ulaşılır , bunlar dahili bir [[Prototype]]nesnede bulunur.
Parazitik miras veya Güç Oluşturucular:
function createSuper() {
var obj = {
member1: 'superMember1',
member2: 'superMember2'
};
return obj;
}
function createSub() {
var obj = createSuper();
obj.member3 = 'subMember3';
return obj;
}
Bu yaklaşım temelde "nesne büyütmeye" dayanmaktadır, newoperatörü kullanmanıza gerek yoktur ve gördüğünüz gibi thisanahtar kelime dahil değildir.
var subInstance = createSub();
ECMAScript 5. Baskı. Object.createyöntem:
// Check if native implementation available
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {} // empty constructor
F.prototype = o; // set base object as prototype
return new F(); // return empty object with right [[Prototype]]
};
}
var superInstance = {
member1: 'superMember1',
member2: 'superMember2'
};
var subInstance = Object.create(superInstance);
subInstance.member3 = 'subMember3';
Yukarıdaki yöntem, Crockford tarafından önerilen bir prototip kalıtım tekniğidir .
Nesne örnekleri diğer nesne örneklerinden miras alır, hepsi bu.
Çünkü kalıtsal özellikler, baştan yeni nesne örnekleri kopyalanmaz, çünkü bu teknik daha iyi basit bir "nesne büyütme" den olabilir taban nesne olarak ayarlanır [[Prototype]]ait genişletilmiş nesne Yukarıdaki örnekte de, subInstancefiziksel olarak sadece içeren member3özellik.