繼承的實現方式之 原型鏈
阿新 • • 發佈:2020-07-15
原型鏈實現繼承
基本模式
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新增一個方法:
問題
- 原本在父類上屬於例項的屬性在繼承後變成了子類的原型屬性
- 建立subtype例項時,無法在向SuperType的建構函式傳參,從supertype繼承來的屬性值不能自定
- 對繼承來的引用型別的屬性,在任一個例項上做的修改會體現在所有例項上