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

JavaScript寄生組合式繼承原理與用法分析

 更新時(shí)間:2019年01月11日 11:26:08   作者:saberVIII  
這篇文章主要介紹了JavaScript寄生組合式繼承,結(jié)合實(shí)例形式分析了javascript寄生組合式繼承的原理、定義與簡(jiǎn)單使用方法,需要的朋友可以參考下

本文實(shí)例講述了JavaScript寄生組合式繼承。分享給大家供大家參考,具體如下:

寄生組合式繼承

寄生組合式繼承,就是通過(guò)偽造對(duì)象來(lái)繼承屬性,通過(guò)原型鏈的混成形式來(lái)繼承方法。

這種技術(shù)的基本思路是:不必為了指定子類型的原型而調(diào)用超類型的構(gòu)造函數(shù),因?yàn)槲覀兯枰闹皇浅愋驮偷囊粋€(gè)副本而已(這一點(diǎn)正是組合繼承的問(wèn)題,并且正是JavaScript這種原型式語(yǔ)言的強(qiáng)大之處,直接copy對(duì)象-原型對(duì)象)。本質(zhì)上,就是使用寄生式繼承來(lái)繼承超類型的原型,然后再將結(jié)果指定給子類型的原型。

function inheritPrototype(subType, superType){
  var prototype = Object.create(superType.prototype); //創(chuàng)建超類型原型副本
  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);
  //實(shí)例屬性
  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代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼,可得如下運(yùn)行結(jié)果:

這個(gè)是寄生組合式繼承的最簡(jiǎn)單形式。這個(gè)函數(shù)接收兩個(gè)參數(shù):

1. 子類型構(gòu)造函數(shù)
2. 超類型構(gòu)造函數(shù)

在函數(shù)內(nèi)部,寄生組合式繼承最簡(jiǎn)形式分為3個(gè)步驟:

1. 創(chuàng)建超類型原型副本;
2. 為創(chuàng)建的副本指定constructor屬性,從而彌補(bǔ)因?yàn)橹貙慡ubType原型而失去的默認(rèn)的constructor屬性,這個(gè)原型副本的constructor屬性變化:SuperType –> SubType;
3. 將該完善好的副本賦值給子類型的原型。

寄生組合式繼承的圖解如下:

寄生組合式繼承的高效率體現(xiàn)在它只調(diào)用了一次SuperType構(gòu)造函數(shù),并且因此避免了在SubType.prototype上面創(chuàng)建不必要的,多余的屬性。與此同時(shí),原型鏈還能保持不變。

更多關(guān)于JavaScript相關(guān)內(nèi)容還可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • layer ui 導(dǎo)入文件之前傳入數(shù)據(jù)的實(shí)例

    layer ui 導(dǎo)入文件之前傳入數(shù)據(jù)的實(shí)例

    今天小編就為大家分享一篇layer ui 導(dǎo)入文件之前傳入數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • 使用js驗(yàn)證hash,content hash , chunk hash的區(qū)別解析

    使用js驗(yàn)證hash,content hash , chunk hash的區(qū)別解

    crypto-js是一個(gè)JavaScript加密算法庫(kù),用于實(shí)現(xiàn)各種加密算法和哈希函數(shù),它提供了一種簡(jiǎn)單而強(qiáng)大的方式來(lái)執(zhí)行加密操作,包括對(duì)稱加密算法、非對(duì)稱加密算法和哈希函數(shù)等,本文給大家介紹使用js驗(yàn)證hash,content hash , chunk hash的區(qū)別解析,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • javascript與CSS復(fù)習(xí)(三)

    javascript與CSS復(fù)習(xí)(三)

    呵呵,又弄成了三部曲,這是最后一部分,關(guān)于鼠標(biāo)和瀏覽器本身顯示上的一些屬性。
    2010-06-06
  • JS?中數(shù)組的增刪改查和對(duì)象的增刪改查實(shí)例詳解

    JS?中數(shù)組的增刪改查和對(duì)象的增刪改查實(shí)例詳解

    這篇文章主要介紹了JS?中數(shù)組的增刪改查和對(duì)象的增刪改查實(shí)例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • js chrome瀏覽器判斷代碼

    js chrome瀏覽器判斷代碼

    今天發(fā)現(xiàn)chrome還是有一些獨(dú)一無(wú)二的東西,基于它們,我們就可以搞出基于特征的判定了。
    2010-03-03
  • js獲取圖片base64的正確實(shí)現(xiàn)方式

    js獲取圖片base64的正確實(shí)現(xiàn)方式

    這篇文章主要給大家介紹了關(guān)于js獲取圖片base64的正確實(shí)現(xiàn)方式,BLOB是二進(jìn)制大對(duì)象,是一個(gè)可以存儲(chǔ)二進(jìn)制文件的容器,?在計(jì)算機(jī)中BLOB常常是數(shù)據(jù)庫(kù)中用來(lái)存儲(chǔ)二進(jìn)制文件的字段類型,需要的朋友可以參考下
    2024-01-01
  • 使用JavaScript修改瀏覽器URL地址欄的實(shí)現(xiàn)代碼

    使用JavaScript修改瀏覽器URL地址欄的實(shí)現(xiàn)代碼

    這篇文章主要介紹了如何使用JavaScript修改瀏覽器URL地址欄,需要的朋友可以參考下
    2013-10-10
  • ES6使用新特性Proxy實(shí)現(xiàn)的數(shù)據(jù)綁定功能實(shí)例

    ES6使用新特性Proxy實(shí)現(xiàn)的數(shù)據(jù)綁定功能實(shí)例

    這篇文章主要介紹了ES6使用新特性Proxy實(shí)現(xiàn)的數(shù)據(jù)綁定功能,結(jié)合具體實(shí)例形式分析了ES6使用Proxy實(shí)現(xiàn)數(shù)據(jù)綁定具體原理、操作步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • 詳解微信小程序的 request 封裝示例

    詳解微信小程序的 request 封裝示例

    這篇文章主要介紹了詳解微信小程序的 request 封裝示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • JS中錨點(diǎn)鏈接點(diǎn)擊平滑滾動(dòng)并自由調(diào)整到頂部位置

    JS中錨點(diǎn)鏈接點(diǎn)擊平滑滾動(dòng)并自由調(diào)整到頂部位置

    這篇文章主要介紹了JS中錨點(diǎn)鏈接點(diǎn)擊平滑滾動(dòng)并自由調(diào)整到頂部位置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02

最新評(píng)論

平果县| 翁源县| 崇义县| 芮城县| 达州市| 井研县| 仁布县| 阿荣旗| 岑巩县| 霞浦县| 扎兰屯市| 邢台县| 许昌市| 内丘县| 确山县| 东山县| 张掖市| 江陵县| 辽阳市| 五大连池市| 南川市| 长春市| 增城市| 闸北区| 芜湖县| 平谷区| 大冶市| 蓬莱市| 肇州县| 吉水县| 灵山县| 纳雍县| 临澧县| 临海市| 平湖市| 岳西县| 巴塘县| 永顺县| 怀仁县| 米易县| 太仆寺旗|