1、構(gòu)造函數(shù)綁定方式
function A(){
this.a = 1;
}
function B(){
A.apply(this, arguments);
this.b = 2;
}
var b = new B();
b.a; //1
優(yōu)點(diǎn):簡單易懂
缺點(diǎn):無法繼承父類A的原型里的屬性和方法
2、原型模式
function A(){
this.a = 1;
}
A.prototype.aa = 11;
function B(){
his.b = 2;
}
B.prototype = new A();
B.prototype.constructor = B;
var b = new B();
b.a; //1
b.aa; //11
優(yōu)點(diǎn):子類可以繼承父類A的原型里的屬性和方法
缺點(diǎn):創(chuàng)建子類實(shí)例需要多次創(chuàng)建父類對(duì)象,消耗內(nèi)存
3、直接繼承prototype
function A(){
this.a = 1;
}
A.prototype.aa = 11;
function B(){
this.b = 2;
}
B.prototype = A.prototype;
B.prototype.constructor = B;
var b = new B();
b.a; //1
b.aa; //11
優(yōu)點(diǎn):子類可以繼承父類A的原型里的屬性和方法,無需創(chuàng)建父類對(duì)象
缺點(diǎn):父類A的原型對(duì)象被修改,其constructor屬性指向了子類B
4、原型鏈繼承
function A(){
this.a = 1;
}
A.prototype.aa = 11;
function B(){
A.apply(this, arguments);
this.b = 2;
}
B.prototype.__proto__ = A.prototype;
//或者
//Object.setPrototypeOf(B.prototype, A.prototype);
var b = new B();
b.a; //1
b.aa; //11
優(yōu)點(diǎn):具有上述其他方式的優(yōu)點(diǎn)
缺點(diǎn):需要高版本的瀏覽器支持