国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javascript繼承方法以及優(yōu)缺點(diǎn)

xiao7cn / 3212人閱讀

摘要:前提組合指的是什么就是這兩部分的組合構(gòu)造函數(shù)屬性的繼承和建立子類和父類原型的鏈接。與此同時(shí),原型鏈還能保持不變開發(fā)人員普遍認(rèn)為寄生組合式繼承是引用類型最理想的繼承方式

前提: 組合指的是什么?就是這兩部分的組合:構(gòu)造函數(shù)屬性的繼承和建立子類和父類原型的鏈接。

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

最簡單的方法,使用call或apply方法,將父對(duì)象的構(gòu)造函數(shù)綁定在子對(duì)象上

function Super(name){
    this.name=name;
    this.friends = ["小紅","小強(qiáng)"];
}
Super.prototype.sayName = function(){
    alert(this.name)
};
function Sub(name){
    Super.apply(this,arguments);
}

var instance1 = new Sub("小明");
var instance2 = new Sub("小明");
instance1.friends.push("張三");
console.log(instance1.friends);//["小紅", "小強(qiáng)", "張三"]
console.log(instance2.friends);//["小紅", "小強(qiáng)"]

缺點(diǎn): 沒辦法繼承超類中的原型屬性和方法

原型鏈繼承

        function Super(){
            this.name="小明";
        }
        Super.prototype.sayName = function(){
            alert(this.name)
        };
        function Sub(){}
        
        Sub.prototype = new Super();
        
        Sub.prototype.constructor = Sub;  
        //此句的作用是為了不讓繼承鏈的紊亂,因?yàn)槿魏我粋€(gè)prototype對(duì)象都有一個(gè)constructor屬性,指向它的構(gòu)造函數(shù),
        //并且每一個(gè)實(shí)例也有一個(gè)constructor屬性,默認(rèn)調(diào)用prototype對(duì)象的constructor屬性,
        //所以new Animal()的constructor指向Super,導(dǎo)致Sub.prototype.constructor改而指向了Super 為了不導(dǎo)致紊亂 所以要手動(dòng)指回
        
        var instance = new Sub();
        instance.sayName();//小明

缺點(diǎn):
1.當(dāng)父類中包含引用類型屬性值時(shí),其中一個(gè)子類的多個(gè)實(shí)例中,只要其中一個(gè)實(shí)例引用屬性只發(fā)生修改一個(gè)修改,其他實(shí)例的引用類型屬性值也會(huì)立即發(fā)生改變
2.原因是父類的屬性變成子類的原型屬性

組合式繼承
(原型繼承+借用構(gòu)造函數(shù)繼承)

    
        function Super(){
        this.name="小明";
            this.friends = ["小紅","小強(qiáng)"];
        }
        Super.prototype.sayName = function(){
            alert(this.name)
        };
        function Sub(){
            Super.call(this);
        }
        
        Sub.prototype = new Super();
        var instance1 = new Sub();
        var instance2 = new Sub();
        instance1.friends.push("張三");
        console.log(instance1.friends);//["小紅", "小強(qiáng)", "張三"]
        console.log(instance2.friends);//["小紅", "小強(qiáng)"]
        instance1.sayName();//小明
        instance2.sayName();//小明

缺點(diǎn):
1.兩次調(diào)用父構(gòu)造函數(shù) 并且子類的自由屬性和原型鏈上的屬性會(huì)重復(fù)覆蓋 (打印instance1對(duì)象 instance1.prototype和instance1都有一個(gè)name屬性)
2.同原型鏈繼承的第一個(gè)缺點(diǎn)

寄生組合式繼承
寄生組合式繼承 兩步:

1.在子類中調(diào)用父類的構(gòu)造函數(shù):
  Super.apply(this,arguments)
2.建立子類和父類原型的鏈接 
  最簡單的方法就是用Object.create()方法對(duì)父類的原型進(jìn)行淺復(fù)制,賦給子類原型:
  Sub.prototype=Object.create(Super.prototype);   //相比之前的原型鏈繼承方法:SubType.prototype=new SuperType();這里沒有創(chuàng)建構(gòu)造函數(shù);

    //寄生組合式繼承函數(shù)
        function inheritPrototype(sub,super){
            var prototype=Object.create(super.prototype) 
            prototype.constructor = sub; //增強(qiáng)對(duì)象
            sub.prototype = prototype; //最后指定對(duì)象  
        }
   
    //最終的實(shí)現(xiàn)方法
        function Super(name){
            this.name=name;
        }
        Super.prototype.sayName=function(){console.log(this.name)}
        
        function Sub(name,age){
            Super.call(this,name);
            this.age=age;
        }
        inheritPrototype(SubType,SuperType); //實(shí)現(xiàn)繼承
        
        //其實(shí),說白了寄生組合式繼承就是一個(gè)借用構(gòu)造函數(shù) + 相當(dāng)于淺拷貝父類的原型對(duì)象

這種方式的高效率體現(xiàn)它只調(diào)用了一次Parent構(gòu)造函數(shù),并不會(huì)創(chuàng)建不必要的、多余的屬性。與此同時(shí),原型鏈還能保持不變;開發(fā)人員普遍認(rèn)為寄生組合式繼承是引用類型最理想的繼承方式.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/97408.html

相關(guān)文章

  • 【譯】每個(gè)JavaScript 開發(fā)者應(yīng)該了解的10個(gè)面試題

    摘要:避免脆弱的基類問題。紅牌警告沒有提到上述任何問題。單向數(shù)據(jù)流意味著模型是單一的事實(shí)來源。單向數(shù)據(jù)流是確定性的,而雙向綁定可能導(dǎo)致更難以遵循和理解的副作用。原文地址 1. 你能說出兩種對(duì) JavaScript 應(yīng)用開發(fā)者而言的編程范式嗎? 希望聽到: 2. 什么是函數(shù)編程? 希望聽到: 3. 類繼承和原型繼承的不同? 希望聽到 4. 函數(shù)式編程和面向?qū)ο缶幊痰膬?yōu)缺點(diǎn)? ...

    mykurisu 評(píng)論0 收藏0
  • JavaScript繼承方式及優(yōu)缺點(diǎn)

    摘要:繼承簡介在的中的面向?qū)ο缶幊蹋^承是給構(gòu)造函數(shù)之間建立關(guān)系非常重要的方式,根據(jù)原型鏈的特點(diǎn),其實(shí)繼承就是更改原本默認(rèn)的原型鏈,形成新的原型鏈的過程。 showImg(https://segmentfault.com/img/remote/1460000018998684); 閱讀原文 前言 JavaScript 原本不是純粹的 OOP 語言,因?yàn)樵?ES5 規(guī)范中沒有類的概念,在 ...

    nanchen2251 評(píng)論0 收藏0
  • 深入理解JavaScript

    摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對(duì)于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...

    myeveryheart 評(píng)論0 收藏0
  • 7個(gè) Javascript 面試題及回答策略

    摘要:使用異步編程,有一個(gè)事件循環(huán)。它作為面向?qū)ο缶幊痰奶娲桨福渲袘?yīng)用狀態(tài)通常與對(duì)象中的方法搭配并共享。在用面向?qū)ο缶幊虝r(shí)遇到不同的組件競爭相同的資源的時(shí)候,更是如此。 翻譯:瘋狂的技術(shù)宅原文:https://www.indeed.com/hire/i... 本文首發(fā)微信公眾號(hào):jingchengyideng歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 不管你是面試官還是求職者,里面...

    李義 評(píng)論0 收藏0
  • JavaScript中的繼承

    摘要:前言作為中最重要的內(nèi)容之一,繼承問題一直是我們關(guān)注的重點(diǎn)。如果一個(gè)類別繼承自另一個(gè)類別,就把這個(gè)稱為的子類,而把稱為的父類別也可以稱是的超類。 前言 作為 JavaScript 中最重要的內(nèi)容之一,繼承問題一直是我們關(guān)注的重點(diǎn)。那么你是否清晰地知道它的原理以及各種實(shí)現(xiàn)方式呢 閱讀這篇文章,你將知道: 什么是繼承 實(shí)現(xiàn)繼承有哪幾種方式 它們各有什么特點(diǎn) 這里默認(rèn)你已經(jīng)清楚的知道構(gòu)造函...

    guyan0319 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<