本文實例講述了JavaScript寄生組合式繼承。分享給大家供大家參考,具體如下:
寄生組合式繼承
寄生組合式繼承,就是通過偽造對象來繼承屬性,通過原型鏈的混成形式來繼承方法。
這種技術的基本思路是:不必為了指定子類型的原型而調用超類型的構造函數,因為我們所需要的只是超類型原型的一個副本而已(這一點正是組合繼承的問題,并且正是JavaScript這種原型式語言的強大之處,直接copy對象-原型對象)。本質上,就是使用寄生式繼承來繼承超類型的原型,然后再將結果指定給子類型的原型。
function inheritPrototype(subType, superType){ var prototype = Object.create(superType.prototype); //創建超類型原型副本 prototype.constructor = subType; //修改原型副本的不同屬性 subType.prototype = prototype; //指定原型}function SuperType(name){ this.name = name; this.colors = ["red", "blue", "green"];}SuperType.prototype.sayName = function(){ console.log(this.name);}function SubType(name, age){ //繼承屬性 SuperType.call(this, name); //實例屬性 this.age = age;}//繼承方法inheritPrototype(SubType, SuperType);SubType.prototype.sayAge = function(){ console.log(this.age);};var instance1 = new SubType("Nicholas", 29);instance1.colors.push("black");console.log(instance1.colors); //"red, blue, green, black"instance1.sayName(); //"Nicholas"instance1.sayAge(); //29這里使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.VeVB.COm/code/HtmlJsRun測試上述代碼,可得如下運行結果:

這個是寄生組合式繼承的最簡單形式。這個函數接收兩個參數:
1. 子類型構造函數
2. 超類型構造函數
在函數內部,寄生組合式繼承最簡形式分為3個步驟:
1. 創建超類型原型副本;
2. 為創建的副本指定constructor屬性,從而彌補因為重寫SubType原型而失去的默認的constructor屬性,這個原型副本的constructor屬性變化:SuperType
主站蜘蛛池模板:
泰兴市|
三江|
晋城|
二手房|
铅山县|
呈贡县|
克东县|
顺义区|
阆中市|
大厂|
阿拉善盟|
修文县|
民丰县|
丰宁|
柘城县|
定南县|
光泽县|
丹巴县|
涿鹿县|
台江县|
农安县|
舟曲县|
金山区|
鄂州市|
屏山县|
峨边|
田阳县|
西和县|
潮州市|
宾川县|
吉林省|
铜川市|
乐业县|
宿迁市|
大足县|
攀枝花市|
洱源县|
仁怀市|
洱源县|
昂仁县|
当雄县|