Di JavaScript Anda tidak memiliki kelas tetapi Anda bisa mendapatkan warisan dan perilaku yang digunakan kembali dalam banyak cara:
Warisan pseudo-klasik (melalui pembuatan prototipe):
function Super () {
this.member1 = 'superMember1';
}
Super.prototype.member2 = 'superMember2';
function Sub() {
this.member3 = 'subMember3';
//...
}
Sub.prototype = new Super();
Harus digunakan dengan newoperator:
var subInstance = new Sub();
Aplikasi fungsi atau "rangkaian konstruktor":
function Super () {
this.member1 = 'superMember1';
this.member2 = 'superMember2';
}
function Sub() {
Super.apply(this, arguments);
this.member3 = 'subMember3';
}
Pendekatan ini juga harus digunakan dengan newoperator:
var subInstance = new Sub();
Perbedaannya dengan contoh pertama adalah ketika kita applymenjadi Superkonstruktor ke thisobjek di dalamnya Sub, ia menambahkan properti yang ditugaskan ke thison Super, langsung pada instance baru, misalnya subInstanceberisi properti member1dan member2langsung ( subInstance.hasOwnProperty('member1') == true;).
Dalam contoh pertama, properti tersebut dicapai melalui rantai prototipe , mereka ada di [[Prototype]]objek internal .
Warisan parasit atau Pembangun Daya:
function createSuper() {
var obj = {
member1: 'superMember1',
member2: 'superMember2'
};
return obj;
}
function createSub() {
var obj = createSuper();
obj.member3 = 'subMember3';
return obj;
}
Pendekatan ini pada dasarnya didasarkan pada "penambahan objek", Anda tidak perlu menggunakan newoperator, dan seperti yang Anda lihat, thiskata kunci tidak terlibat.
var subInstance = createSub();
ECMAScript Edisi ke-5. Object.createmetode:
// 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';
Metode di atas adalah teknik pewarisan prototipe yang diusulkan oleh Crockford .
Contoh objek mewarisi dari contoh objek lain, itu saja.
Teknik ini bisa lebih baik daripada sederhana "objek augmentation" karena sifat diwariskan tidak disalin semua contoh objek baru, karena dasar objek ditetapkan sebagai [[Prototype]]dari diperpanjang objek, dalam contoh di atas subInstancemengandung fisik hanya member3properti.