国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

淺談JS繼承_借用構造函數 & 組合式繼承

2019-11-20 09:14:05
字體:
來源:轉載
供稿:網友

2.借用構造函數

為解決原型中包含引用類型值所帶來的問題, 我們使用一種叫做 借用構造函數(constructor stealing)的技術(又叫偽造對象或經典繼承)。

這種技術的基本思想:在子類構造函數內部調用超類型構造函數。

通過使用apply()和call()方法可以在新創(chuàng)建的子類對象上執(zhí)行構造函數。

function SuperType(){  this.colors = ["red", "blue", "green"];}function SubType(){  //繼承了 SuperType  SuperType.apply(this);}var instance1 = new SubType();instance1.colors.push("black");alert(instance1.colors);  //red,blue,green,blackvar instance2 = new SubType();alert(instance2.colors);  //red,blue,green

在上述例子中,實際上是在新創(chuàng)建的SubType實例(instance1 instance2)的環(huán)境下調用了SuperType的構造函數。這樣一來,就會在新SubType對象上執(zhí)行SuperType()函數中定義的所有對象初始化代碼。 所以Subtype的每個實例就都會具有自己的colors屬性的副本了。

傳遞參數

對于原型鏈來講,借用構造函數有一個很大的優(yōu)勢,即可以在子類型構造函數中想超類型構造函數傳遞參數。

function SuperType(name){  this.name = name;}function SubType(){  SuperType.call(this, "Bob");  this.age = 18;}var instance1 = new SubType();alert(instance1.age);  //18alert(instance1.name);  //Bob

借用構造函數的問題:

方法都在構造函數中定義,因此函數復用就無從談起了。而且,在超類型的原型中定義的方法,對子類型而言也是不可見的。

3. 組合繼承

組合繼承(combination inheritance), 有時候也叫作偽經典繼承, 指的是將原型鏈和借用構造函數的技術組合到一起。從而發(fā)揮二者之長的一種繼承模式。

使用原型鏈實現對原型屬性和方法的繼承;

通過借用構造函數來實現對實例屬性的繼承。

這樣,既通過在原型上定義方法實現了函數的復用,又能保證每個實例都有他自己的屬性。

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;}  //繼承方法SubType.prototype = new SuperType();SubType.prototype.sayAge = function(){  alert(this.age);}var instance1 = new SubType("Bob", 22);instance1.colors.push("black");alert(instance1.colors);   //red,blue,green,blackinstance1.sayName();     //Bobinstance1.sayAge();     //22var instance2 = new SubType("Alice", 21);alert(instance2.colors);  //red,blue,greeninstance2.sayName();    //Aliceinstance2.sayAge();     //21

在這個例子中, SuperType構造函數定義了兩個屬性: name和colors。 SuperType的原型定義了一個方法sayName()。

SubType構造函數在調用SuperType構造函數時傳入了name參數,定義了他自己的屬性age。然后將SuperType的實例賦值給SubType的原型。在該原型上定義了方法sayAge()。

這樣一來,就可以讓兩個不同的SubType實例既分別擁有自己的屬性 - 包括colors屬性,又可以使用相同的方法。

以上這篇淺談JS繼承_借用構造函數 & 組合式繼承就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 岑溪市| 介休市| 河源市| 清水县| 石台县| 克什克腾旗| 广宗县| 潮安县| 图片| 习水县| 嘉善县| 永德县| 邢台县| 灵石县| 尚义县| 和硕县| 藁城市| 邢台市| 荣昌县| 秭归县| 汨罗市| 新巴尔虎左旗| 开平市| 荣成市| 扎赉特旗| 航空| 浠水县| 乐至县| 平定县| 宾阳县| 鲁甸县| 黔西| 金山区| 宁阳县| 灌云县| 谷城县| 星子县| 勐海县| 育儿| 临清市| 新津县|