欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

ECMAScript6中類(lèi)繼承解析的示例-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)ECMAScript 6中類(lèi)繼承解析的示例的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比桃江網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式桃江網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋桃江地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴(lài)。

類(lèi)繼承

看類(lèi)繼承前,先回顧構(gòu)造函數(shù)怎么實(shí)現(xiàn)對(duì)象的繼承的

        function F() {
            this.a = 1;
        }
        function Son() {
            F.call(this);
        } 
        function inherit(S, F) {
            S.prototype = Object.create(F.prototype);
            S.prototype.constructor = S;
        }
        inherit(Son, F);
        let son = new Son();

它實(shí)現(xiàn)了哪幾個(gè)功能:

繼承F的this屬性也就是F實(shí)例對(duì)象的屬性

Son.prototype.__proto__ === F.prototype 實(shí)現(xiàn)了上下輩分的繼承

son.constructor讓son認(rèn)祖歸宗

同樣類(lèi)繼承也是如此

用來(lái)extends和super關(guān)鍵字,看一個(gè)簡(jiǎn)單的繼承

        class A {
            constructor() {
                this.a = 1;
            }
        }
        class B extends A {
            constructor() {
                super();
                this.b = 2;
            }
            m() {

            }
        }
        let b = new B();

同樣實(shí)現(xiàn)了那三點(diǎn)基本功能

B {a: 1, b: 2}
b.__proto__  == B.prototype
b.__proto__.__proto__ === A.prototype
b.constructor === B

我認(rèn)為:關(guān)鍵字extends實(shí)現(xiàn)了原型的繼承,以及constructor的修正;關(guān)鍵字super實(shí)現(xiàn)了父類(lèi)this的繼承,這里的super相當(dāng)于A.prototype.constructor.call(this)

注意點(diǎn)

寫(xiě)了constructor,就必須在里面寫(xiě)super,不然new子類(lèi)實(shí)例對(duì)象會(huì)報(bào)錯(cuò);要么都不寫(xiě);其次子類(lèi)的中constructor中的this屬性必須寫(xiě)在super后面

1.ES5 的繼承,實(shí)質(zhì)是先創(chuàng)造子類(lèi)的實(shí)例對(duì)象this,然后再將父類(lèi)的方法添加到this上面(Parent.apply(this))。ES6 的繼承機(jī)制完全不同,實(shí)質(zhì)是先將父類(lèi)實(shí)例對(duì)象的屬性和方法,加到this上面(所以必須先調(diào)用super方法),然后再用子類(lèi)的構(gòu)造函數(shù)修改this
2.因?yàn)樽宇?lèi)自己的this對(duì)象,必須先通過(guò)父類(lèi)的構(gòu)造函數(shù)完成塑造,得到與父類(lèi)同樣的實(shí)例屬性和方法,然后再對(duì)其進(jìn)行加工,加上子類(lèi)自己的實(shí)   例屬性和方法。如果不調(diào)用super方法,子類(lèi)就得不到this對(duì)象。

        class B extends A {
            constructor() {    //要么都不寫(xiě),new時(shí)默認(rèn)會(huì)自動(dòng)生成
                super();
                this.b = 2;    //寫(xiě)在super后面
            } 
            m() {

            }
        }

super的各種指向問(wèn)題

super作為函數(shù),只能放在子類(lèi)的constructor中,指向A.prototype.constructor.call(this)

super作為對(duì)象,在子類(lèi)普通方法中調(diào)用,super就是父類(lèi)的原型也就是A.prototype;所以只能調(diào)用原型鏈上的方法,不能動(dòng)用父類(lèi)實(shí)例的方法和屬性constructor{}中的不能調(diào)用

        class A {
            constructor() {

                this.a = 1;
            }
            n() {

                return this;
            }
        }
        class B extends A {
            constructor() {
                
                super();
                this.b = 2;
                
            }
            m() {
                return super.n();
            }
        }
        let b = new B();
        b === b.m();

并且規(guī)定

在子類(lèi)普通方法中通過(guò)super調(diào)用父類(lèi)的方法時(shí),方法內(nèi)部的this指向當(dāng)前的子類(lèi)實(shí)例。

所以上面return this 就是返回子類(lèi)實(shí)例對(duì)象

super作為對(duì)象對(duì)屬性賦值時(shí)
super相當(dāng)于this,賦值屬性也就成了子類(lèi)實(shí)例的屬性

class A {
  constructor() {
    this.x = 1;
  }
}

class B extends A {
  constructor() {
    super();
    this.x = 2;
    super.x = 3;
    console.log(super.x); // undefined
    console.log(this.x); // 3
    console.log(super.valueOf() instanceof B);   //true
  }
}

let b = new B();

super作為對(duì)象,在靜態(tài)方法中指向的是父類(lèi)能調(diào)用父類(lèi)的靜態(tài)方法,如果方法內(nèi)部有this則指向當(dāng)前的子類(lèi)
只有類(lèi)才能調(diào)用類(lèi)的靜態(tài)方法

        class A {
            constructor() {

                this.a = 1;
            }
            static n() {

                return this;
            }
        }
        class B extends A {
            constructor() {
                
                super();
                this.b = 2;
                
            }
            static m() {
                return super.n();
            }
        }
        console.log(A.n() === A)   // true
        console.log(B === B.m());  //true

由于對(duì)象總是繼承其他對(duì)象的,所以可以在任意一個(gè)對(duì)象中,使用super關(guān)鍵字。

var obj = {
  toString() {
    return "MyObject: " + super.toString();
  }
};
Object.getPrototypeOf(obj).toString = function () {
    return "這里super等于obj.__proto__";
}
console.log(obj.toString());        //MyObject: 這里super等于obj.__proto__

類(lèi)的prototype與__proto__

(1)子類(lèi)的__proto__屬性,表示構(gòu)造函數(shù)的繼承,總是指向父類(lèi)。


(2)子類(lèi)prototype屬性的__proto__屬性,表示方法的繼承,總是指向父類(lèi)的prototype屬性。

類(lèi)的繼承模式

class A {
}

class B {
}

// B 的實(shí)例繼承 A 的實(shí)例
Object.setPrototypeOf(B.prototype, A.prototype);

// B 繼承 A 的靜態(tài)屬性
Object.setPrototypeOf(B, A);

const b = new B();

也是因?yàn)檫@種實(shí)現(xiàn)所以類(lèi)能調(diào)用自己的靜態(tài)方法

es6實(shí)現(xiàn)了原始構(gòu)造函數(shù)的繼承

之前Array.apply(this)this并不會(huì)塑造Array里面的內(nèi)部結(jié)構(gòu),所以我們當(dāng)我們用類(lèi)數(shù)組對(duì)象引用數(shù)組方法時(shí)用null代替了
而es6用類(lèi)實(shí)現(xiàn)它的繼承,
代碼摘自es6入門(mén)

class MyArray extends Array {
  constructor(...args) {
    super(...args);
  }
}

var arr = new MyArray();
arr[0] = 12;
arr.length // 1

arr.length = 0;
arr[0] // undefined

需要注意的是

ES6 改變了Object構(gòu)造函數(shù)的行為,一旦發(fā)現(xiàn)Object方法不是通過(guò)new Object()這種形式調(diào)用,ES6 規(guī)定Object構(gòu)造函數(shù)會(huì)忽略參數(shù)。

class NewObj extends Object{
  constructor(){
    super(...arguments);
  }
}
var o = new NewObj({attr: true});
o.attr === true  // false

傳入?yún)?shù)會(huì)無(wú)效的

感謝各位的閱讀!關(guān)于“ECMAScript 6中類(lèi)繼承解析的示例”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站標(biāo)題:ECMAScript6中類(lèi)繼承解析的示例-創(chuàng)新互聯(lián)
文章分享:http://www.chinadenli.net/article44/pssee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃網(wǎng)站收錄品牌網(wǎng)站建設(shè)小程序開(kāi)發(fā)Google網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)