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

淺談JS繼承_寄生式繼承 & 寄生組合式繼承

 更新時(shí)間:2016年08月16日 09:52:16   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談JS繼承_寄生式繼承 & 寄生組合式繼承。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

5.寄生式繼承

與寄生構(gòu)造函數(shù)和工廠模式類似,創(chuàng)建一個(gè)僅用于封裝繼承過程的函數(shù),該函數(shù)在內(nèi)部以某種方式來增強(qiáng)對象,最后返回對象。

function createAnother(original){
 var clone = Object.create(original); //通過調(diào)用函數(shù)創(chuàng)建一個(gè)新對象
 clone.sayHi = function(){    //以某種方式來增強(qiáng)這個(gè)對象
  alert("Hi");
 };
 
 return clone;      //返回這個(gè)對象
}

var person = {
 name: "Bob",
 friends: ["Shelby", "Court", "Van"]
};
var anotherPerson = createAnother(person);
anotherPerson.sayHi();

在上述例子中,createAnother函數(shù)接收了一個(gè)參數(shù),也就是將要作為新對象基礎(chǔ)的對象。

anotherPerson是基于person創(chuàng)建的一個(gè)新對象,新對象不僅具有person的所有屬性和方法,還有自己的sayHi()方法。

6.寄生組合式繼承

組合繼承是js最常用的繼承模式,組合繼承最大的問題就是無論在什么情況下,都會調(diào)用兩次構(gòu)造函數(shù):一次是在創(chuàng)建子類型原型時(shí),另一次是在子類型構(gòu)造函數(shù)內(nèi)部。

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);  //第二次調(diào)用SuperType()
 
 this.age = age;
}
SubType.prototype = new SuperType();  //第一次調(diào)用SuperType()
SubType.prototype.sayAge = function(){
 alert(this.age);
}

在第一次調(diào)用SuperType構(gòu)造函數(shù)時(shí),SubType.prototype會得到兩個(gè)屬性: name和colors; 他們都是SuperType的實(shí)例屬性,只不過現(xiàn)在位于SubType的原型中。

當(dāng)調(diào)用SubType構(gòu)造函數(shù)時(shí),又會調(diào)用一次SuperType構(gòu)造函數(shù),這一次又在新對象上創(chuàng)建了實(shí)例屬性name和colors。

于是這兩個(gè)屬性就屏蔽了原型中的兩個(gè)同名屬性。

寄生組合式繼承就是為了解決這一問題。

通過借用構(gòu)造函數(shù)來繼承屬性;

通過原型鏈來繼承方法。

不必為了指定子類型的原型而調(diào)用超類型的構(gòu)造函數(shù),

function inheritPrototype(subType, superType){
 var protoType = Object.create(superType.prototype); //創(chuàng)建對象
 protoType.constructor = subType;     //增強(qiáng)對象
 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);  //第二次調(diào)用SuperType()
 
 this.age = age;
}
inheritPrototype(SubType, SuperType)
SubType.prototype.sayAge = function(){
 alert(this.age);
}

var instance = new SubType("Bob", 18);
instance.sayName();
instance.sayAge();

inheritPrototype函數(shù)接收兩個(gè)參數(shù):子類型構(gòu)造函數(shù)和超類型構(gòu)造函數(shù)。

1. 創(chuàng)建超類型原型的副本。

2. 為創(chuàng)建的副本添加constructor屬性,彌補(bǔ)因重寫原型而失去的默認(rèn)的constructor屬性

3. 將新創(chuàng)建的對象(即副本)賦值給子類型的原型這種方法只調(diào)用了一次SuperType構(gòu)造函數(shù),instanceof 和isPrototypeOf()也能正常使用。

以上這篇淺談JS繼承_寄生式繼承 & 寄生組合式繼承就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Postman自動化接口測試實(shí)戰(zhàn)

    Postman自動化接口測試實(shí)戰(zhàn)

    有時(shí)我們可能需要在多個(gè)環(huán)境下對同一個(gè)接口進(jìn)行測試。比如我們請求的域名,開發(fā)、測試、生產(chǎn)環(huán)境,請求參數(shù)。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • JavaScript實(shí)現(xiàn)有限狀態(tài)機(jī)的示例代碼

    JavaScript實(shí)現(xiàn)有限狀態(tài)機(jī)的示例代碼

    有限狀態(tài)機(jī)(Finite?State?Machine,?FSM)是一種數(shù)學(xué)模型,用于描述系統(tǒng)在不同狀態(tài)下的行為,本文給大家介紹JavaScript實(shí)現(xiàn)有限狀態(tài)機(jī)的示例代碼,感興趣的朋友一起看看吧
    2024-12-12
  • 手把手教你用js插入HTML元素

    手把手教你用js插入HTML元素

    JavaScript提供了豐富的屬性操作方法,用于操作各種HTML元素,下面這篇文章主要給大家介紹了關(guān)于用js插入HTML元素的相關(guān)資料,文章通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • js刪除數(shù)組中指定元素的幾種方式

    js刪除數(shù)組中指定元素的幾種方式

    js數(shù)組是js部分非常重要的知識,有時(shí)我們有這么個(gè)需求js數(shù)組刪除指定元素,下面這篇文章主要給大家介紹了關(guān)于js刪除數(shù)組中指定元素的幾種方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • JS實(shí)現(xiàn)仿QQ面板的手風(fēng)琴效果折疊菜單代碼

    JS實(shí)現(xiàn)仿QQ面板的手風(fēng)琴效果折疊菜單代碼

    這篇文章主要介紹了JS實(shí)現(xiàn)仿QQ面板的手風(fēng)琴效果折疊菜單代碼,涉及JavaScript基于鼠標(biāo)事件動態(tài)操作頁面元素樣式的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • js createRange與createTextRange的一些用法實(shí)例

    js createRange與createTextRange的一些用法實(shí)例

    關(guān)于createTextRange和createRange的一些用法,腳本之家增強(qiáng)版。
    2010-05-05
  • TypeScript創(chuàng)建一個(gè)簡單Web應(yīng)用

    TypeScript創(chuàng)建一個(gè)簡單Web應(yīng)用

    這篇文章主要為大家介紹了TypeScript創(chuàng)建一個(gè)簡單Web應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • JavaScript中自帶的 reduce()方法使用示例詳解

    JavaScript中自帶的 reduce()方法使用示例詳解

    下文小編給大家?guī)砹薺s中自帶的reduce()方法使用示例詳解,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • javascript修改瀏覽器title方法 JS動態(tài)修改瀏覽器標(biāo)題

    javascript修改瀏覽器title方法 JS動態(tài)修改瀏覽器標(biāo)題

    給大家講一個(gè)用javascript修改瀏覽器title方法和技巧,需要的朋友把代碼測試吧。
    2017-11-11
  • javascript操作cookie

    javascript操作cookie

    本文主要介紹了js對cookie的操作:js設(shè)置cookie;js獲取cookie;給cookie設(shè)置終止日期;刪除cookie 等,具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01

最新評論

东丰县| 桐庐县| 巢湖市| 崇左市| 湖南省| 浙江省| 怀来县| 浦县| 许昌县| 定陶县| 孝昌县| 开原市| 阿克陶县| 石楼县| 奎屯市| 南平市| 务川| 临邑县| 永靖县| 中西区| 治多县| 泰兴市| 徐闻县| 沾益县| 望江县| 石嘴山市| 南昌市| 荣昌县| 志丹县| 吉安市| 德庆县| 天柱县| 伊宁市| 福海县| 阜康市| 顺平县| 临猗县| 右玉县| 林甸县| 平和县| 上思县|