日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS继承之寄生组合式继承

發布時間:2023/12/29 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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继承之寄生组合式继承的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。