最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS繼承之借用構(gòu)造函數(shù)繼承和組合繼承

 更新時間:2021年11月04日 15:57:05   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了JS繼承之借用構(gòu)造函數(shù)繼承和組合繼承,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

借用構(gòu)造函數(shù)繼承

在解決原型中包含引用類型值所帶來問題的過程中,開發(fā)人員開始使用一種叫做借用構(gòu)造函數(shù)(constructor stealing)的技術(shù)(有時候也叫做偽造對象或經(jīng)典繼承)。這種技術(shù)的基本思想相當(dāng)簡單,即在子類型構(gòu)造函數(shù)的內(nèi)部調(diào)用超類型構(gòu)造函數(shù)。

基本模式

function SuperType(){
 this.colors = ["red", "blue", "green"];
}
function SubType(){
  //繼承了SuperType
 SuperType.call(this);
}

var instance1 = new SubType();
instance1.colors.push("black");
alert(instance1.colors); //"red,blue,green,black"
var instance2 = new SubType();
alert(instance2.colors); //"red,blue,green" 

基本思想

借用構(gòu)造函數(shù)的基本思想就是利用call或者apply把父類中通過this指定的屬性和方法復(fù)制(借用)到子類創(chuàng)建的實(shí)例中。因?yàn)閠his對象是在運(yùn)行時基于函數(shù)的執(zhí)行環(huán)境綁定的。也就是說,在全局中,this等于window,而當(dāng)函數(shù)被作為某個對象的方法調(diào)用時,this等于那個對象。call 、apply方法可以用來代替另一個對象調(diào)用一個方法。call、apply 方法可將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對象。

所以,這個借用構(gòu)造函數(shù)就是,new對象的時候(注意,new操作符與直接調(diào)用是不同的,以函數(shù)的方式直接調(diào)用的時候,this指向window,new創(chuàng)建的時候,this指向創(chuàng)建的這個實(shí)例),創(chuàng)建了一個新的實(shí)例對象,并且執(zhí)行SubType里面的代碼,而SubType里面用call調(diào)用了SuperTyep,也就是說把this指向改成了指向新的實(shí)例,所以就會把SuperType里面的this相關(guān)屬性和方法賦值到新的實(shí)例上,而不是賦值到SupType上面。所有實(shí)例中就擁有了父類定義的這些this的屬性和方法。

優(yōu)勢

相對于原型鏈而言,借用構(gòu)造函數(shù)有一個很大的優(yōu)勢,即可以在子類型構(gòu)造函數(shù)中向超類型構(gòu)造函數(shù)傳遞參數(shù)。因?yàn)閷傩允墙壎ǖ絫his上面的,所以調(diào)用的時候才賦到相應(yīng)的實(shí)例中,各個實(shí)例的值就不會互相影響了。

例如:

function SuperType(name){
this.name = name;
}
function SubType(){
//繼承了SuperType,同時還傳遞了參數(shù)
SuperType.call(this, "Nicholas");
//實(shí)例屬性
this.age = 29;
}
var instance = new SubType();
alert(instance.name); //"Nicholas";
alert(instance.age); //29 

劣勢

如果僅僅是借用構(gòu)造函數(shù),那么也將無法避免構(gòu)造函數(shù)模式存在的問題——方法都在構(gòu)造函數(shù)中定義,因此函數(shù)復(fù)用就無從談起了。而且,在超類型的原型中定義的方法,對子類型而言也是不可見的,結(jié)果所有類型都只能使用構(gòu)造函數(shù)模式。考慮到這些問題,借用構(gòu)造函數(shù)的技術(shù)也是很少單獨(dú)使用的。 

組合繼承

組合繼承(combination inheritance),有時候也叫做偽經(jīng)典繼承。是將原型鏈和借用構(gòu)造函數(shù)的技術(shù)組合到一塊,從而發(fā)揮二者之長的一種繼承模式。/p>

基本思想

思路是使用原型鏈實(shí)現(xiàn)對原型屬性和方法的繼承,而通過借用構(gòu)造函數(shù)來實(shí)現(xiàn)對實(shí)例屬性的繼承。這樣,既通過在原型上定義方法實(shí)現(xiàn)了函數(shù)復(fù)用,又能夠保證每個實(shí)例都有它自己的屬性。

基本模型

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.constructor = SubType;
SubType.prototype.sayAge = function(){
alert(this.age);
};
var instance1 = new SubType("Nicholas", 29);
instance1.colors.push("black");
alert(instance1.colors); //"red,blue,green,black"
instance1.sayName(); //"Nicholas";
instance1.sayAge(); //29
var instance2 = new SubType("Greg", 27);
alert(instance2.colors); //"red,blue,green"
instance2.sayName(); //"Greg";
instance2.sayAge(); //27 

優(yōu)勢

組合繼承避免了原型鏈和借用構(gòu)造函數(shù)的缺陷,融合了它們的優(yōu)點(diǎn),成為JavaScript 中最常用的繼承模式。

劣勢

組合繼承最大的問題就是無論什么情況下,都會調(diào)用兩次超類型構(gòu)造函數(shù):一次是在創(chuàng)建子類型原型的時候,另一次是在子類型構(gòu)造函數(shù)內(nèi)部。雖然子類型最終會包含超類型對象的全部實(shí)例屬性,但我們不得不在調(diào)用子類型構(gòu)造函數(shù)時重寫這些屬性。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用JavaScript做數(shù)獨(dú)的完整實(shí)現(xiàn)過程

    利用JavaScript做數(shù)獨(dú)的完整實(shí)現(xiàn)過程

    數(shù)獨(dú)游戲是在一個9*9的方格中進(jìn)行填數(shù)字的游戲,需要滿足的規(guī)則是每行每列和每個子九宮格都是1~9的不重復(fù)數(shù)字,下面這篇文章主要給大家介紹了關(guān)于如何利用JavaScript做數(shù)獨(dú)的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • JavaScript監(jiān)聽鍵盤事件代碼實(shí)現(xiàn)

    JavaScript監(jiān)聽鍵盤事件代碼實(shí)現(xiàn)

    這篇文章主要介紹了JavaScript監(jiān)聽鍵盤事件代碼實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 在javascript中,null>=0 為真,null==0卻為假,null的值詳解

    在javascript中,null>=0 為真,null==0卻為假,null的值詳解

    這篇文章主要介紹了在javascript中,null>=0 為真,null==0卻為假,null的值詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • javawscript 三級菜單的實(shí)現(xiàn)原理

    javawscript 三級菜單的實(shí)現(xiàn)原理

    javawscript 三級菜單的實(shí)現(xiàn)代碼。
    2009-07-07
  • js+div實(shí)現(xiàn)圖片滾動效果代碼

    js+div實(shí)現(xiàn)圖片滾動效果代碼

    本篇文章主要是對js+div實(shí)現(xiàn)圖片滾動效果的示例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02
  • layer擴(kuò)展打開/關(guān)閉動畫的方法

    layer擴(kuò)展打開/關(guān)閉動畫的方法

    今天小編就為大家分享一篇layer擴(kuò)展打開/關(guān)閉動畫的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JSONP跨域模擬百度搜索

    JSONP跨域模擬百度搜索

    這篇文章主要介紹了JSONP跨域模擬百度搜索,JSONP是JSON?with?padding?的簡寫,應(yīng)用JSON的一種新方法,在后來的Web服務(wù)中非常流行,JSONP看起來與JSON差不多,只不過是被包含在函數(shù)中調(diào)用的JSON,對此感興趣的小伙伴可以參考一下下面文章內(nèi)容
    2021-12-12
  • 微信小程序基于Taro的分享圖片功能實(shí)踐詳解

    微信小程序基于Taro的分享圖片功能實(shí)踐詳解

    這篇文章主要介紹了微信小程序基于Taro的分享圖片功能實(shí)踐詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • javascript日期計(jì)算實(shí)例分析

    javascript日期計(jì)算實(shí)例分析

    這篇文章主要介紹了javascript日期計(jì)算,涉及javascript針對日期計(jì)算的相關(guān)技巧,這里需要注意索引的使用,需要的朋友可以參考下
    2015-06-06
  • Javascript異步編程模型Promise模式詳細(xì)介紹

    Javascript異步編程模型Promise模式詳細(xì)介紹

    異步模式在 Web 編程中變得越來越重要,如何處理異步請求后的操作是一件麻煩事。Promise 是一種異步編程模型,術(shù)語稱作 Deferred 模式,它通過一組API來規(guī)范化異步操作,讓異步操作的流程控制更加容易。
    2014-05-05

最新評論

临泉县| 贡嘎县| 忻州市| 通渭县| 自贡市| 衢州市| 泸溪县| 新绛县| 大方县| 高州市| 宁化县| 阳江市| 丰台区| 柳州市| 浮山县| 吴桥县| 江川县| 馆陶县| 望城县| 丘北县| 凤庆县| 泾阳县| 镇安县| 阿巴嘎旗| 景德镇市| 扶绥县| 微博| 凤山市| 达尔| 浦东新区| 连南| 佛冈县| 雅江县| 万安县| 河曲县| 马关县| 兴安县| 太原市| 江城| 大悟县| 石渠县|