當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JS继承之寄生组合式继承
生活随笔
收集整理的這篇文章主要介紹了
JS继承之寄生组合式继承
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
所謂寄生組合式繼承,即通過借用構造函數來繼承屬性,通過原型鏈的混成形式來繼承方法。
組合繼承彌補了原型鏈和盜用構造函數的不足,是js中使用最多的繼承模式。
- 實現思路:?不必為了指定子類型的原型而調用父類的構造函數,我們所需要的無非就是父類原型的一個副本而已。
- 本質上,就是使用寄生式繼承來繼承父類的原型,然后再將結果指定給子類的原型。 寄生組合式繼承的基本模式如下代碼: function inheritPrototype(subType, superType){var prototype = object(superType.prototype); //創建對象prototype.constructor = subType; //增強對象subType.prototype = prototype; //指定對象
}
上述示例代碼中,函數接收兩個參數:子類構造函數和父類構造函數。在函數內部,第一步是創建父類原型的一個副本。第二步是為創建的副本添加 constructor 屬性,從而彌補因重寫原型而失去的默認的constructor 屬性。最后一步,將新創建的對象(即副本)賦值給子類型的原型。
function inheritPrototype(subType, superType){var prototype = Object.create(superType.prototype); // 創建對象,創建父類原型的一個副本prototype.constructor = subType; // 增強對象,彌補因重寫原型而失去的默認的constructor 屬性subType.prototype = prototype; // 指定對象,將新創建的對象賦值給子類的原型 }// 父類初始化實例屬性和原型屬性 function SuperType(name){this.name = name;this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function(){alert(this.name); };// 借用構造函數傳遞增強子類實例屬性(支持傳參和避免篡改) function SubType(name, age){SuperType.call(this, name);this.age = age; }// 將父類原型指向子類 inheritPrototype(SubType, SuperType);// 新增子類原型屬性 SubType.prototype.sayAge = function(){alert(this.age); }var instance1 = new SubType("jack", 23); var instance2 = new SubType("rose", 20);instance1.colors.push("2"); // ["red", "blue", "green", "2"] instance1.colors.push("3"); // ["red", "blue", "green", "3"]上述代碼的高效率體現在它只調用了一次 SuperType 構造函數,并且因此避免了在 SubType. prototype 上面創建不必要的、多余的屬性。與此同時,原型鏈還能保持不變;因此,還能夠正常使用 instanceof 和 isPrototypeOf()。
總結
以上是生活随笔為你收集整理的JS继承之寄生组合式继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 整理书签博客和文章
- 下一篇: 这一次带你彻底搞懂JS继承