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();
new
Operatö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 new
operatö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 ( ).apply
Super
this
Sub
this
Super
subInstance
member1
member2
subInstance.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, new
operatörü kullanmanıza gerek yoktur ve gördüğünüz gibi this
anahtar kelime dahil değildir.
var subInstance = createSub();
ECMAScript 5. Baskı. Object.create
yö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, subInstance
fiziksel olarak sadece içeren member3
özellik.