1. 程式人生 > 實用技巧 >繼承的實現方式之 原型鏈

繼承的實現方式之 原型鏈

原型鏈實現繼承

基本模式

function SuperType(){
    this.property = true;
}
SuperType.prototype.getSuperValue = function(){
    console.log(this);
    return this.property;
}

function SubType(){
    this.subproperty = false;
}
SubType.prototype = new SuperType();
//這一步和上一步不可以調換順序,否則getSubValue會被新的supertype例項覆蓋
SubType.prototype.getSubValue = function
(){ return this.subproperty; } let instance = new SubType(); console.log(instance.getSuperValue());

過程圖示

1.

function SuperType(){
    this.property = true;
}
SuperType.prototype.getSuperValue = function(){
    console.log(this);
    return this.property;
}

function SubType(){
    this.subproperty = false
; }

建立子類父類建構函式,各自自動生成預設的prototype。其中SuperType的原型上添加了方法getSuperValue。

2.

SubType.prototype = new SuperType();
new SuperType() 實現的效果:


SubType.prototype = new SuperType();將上一步中預設生成的 SubType.prototype 用一個SuperType的例項覆蓋:


3.

SubType.prototype.getSubValue = function(){
    return this.subproperty;
}

為新的prototype新增一個方法:

問題

  1. 原本在父類上屬於例項的屬性在繼承後變成了子類的原型屬性
  2. 建立subtype例項時,無法在向SuperType的建構函式傳參,從supertype繼承來的屬性值不能自定
  3. 對繼承來的引用型別的屬性,在任一個例項上做的修改會體現在所有例項上