亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript原型繼承中的 constructor

Steve_Wang_ / 412人閱讀

摘要:聽(tīng)起來(lái)確實(shí)有點(diǎn)懵逼書(shū)中示例大概就說(shuō)明了是指向它的類的默認(rèn)情況下好了,下面我們來(lái)看看下面的繼承行留意下面這一句的作用注釋掉后的結(jié)果會(huì)發(fā)現(xiàn),去掉這句還是能調(diào)用類構(gòu)造函數(shù)并能成功得出想要的結(jié)果。

轉(zhuǎn)載請(qǐng)注明出處----在河?xùn)|

    磚頭書(shū)中有道: 在默認(rèn)情況下,所有原型對(duì)象都會(huì)自動(dòng)獲得一個(gè) Constructor (構(gòu)造函數(shù))屬性,這個(gè)屬性
是指向prototype 屬性所在函數(shù)的指針。  (聽(tīng)起來(lái)確實(shí)有點(diǎn)懵逼)
    書(shū)中示例:
function    Person(){
}
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = functon(){
    console.log(this.name);
}

大概就說(shuō)明了constructor是指向它的類的(默認(rèn)情況下)

好了,下面我們來(lái)看看下面的繼承:

    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);
        this.age = age;
    }
    /**12行*/SubType.prototype = new SuperType();
    //留意下面這一句的作用
    SubType.prototype.constructor = SubType;
    SubType.prototype.sayAge = function(){
        console.log(this.age);
    }
    var instance1 = new SubType("HEDONGHUI",22);
    instance1.colors.push("black");
    console.log(instance1.colors);
    instance1.sayName();
    instance1.sayAge();

    var instance2 = new SubType("heod",23);
    console.log(instance2.colors);
    instance2.sayName();
    instance2.sayAge();

注釋掉 SubType.prototype.constructor = SubType; 后的結(jié)果:

會(huì)發(fā)現(xiàn),去掉這句instance1 , instance2 還是能調(diào)用Subtype類構(gòu)造函數(shù)并能成功得出想要的結(jié)果。那么問(wèn)題來(lái)了,這句話在原型繼承中的作用是什么呢?

從前文我們知道,原型的constructor 默認(rèn)指向原對(duì)應(yīng)的類型。第12行執(zhí)行完后,SubType原型(SubType.prototype)
指向了SuperType的實(shí)例對(duì)象,而SuperType的實(shí)例對(duì)象的構(gòu)造器是構(gòu)造函數(shù)SuperType,所以
SubType.prototype.constructor就是構(gòu)造對(duì)象SuperType了(換句話說(shuō),SuperType構(gòu)造了SubType的原型)。







這里實(shí)例instance1 ,SubType.prototype.constructor都為 SuperType。這就導(dǎo)致了
SubType.prototype === instance1.constructor.prototype 為false; 這樣會(huì)令人產(chǎn)生費(fèi)解,既然在一開(kāi)始中
(前文)說(shuō)到原型指向所在的類型,一般情況下,instance1.constructor為SubType 。 SubType.prototype ===
SubType.prototype的。 由于第12行代碼實(shí)現(xiàn)了,SubType 繼承 SuperType導(dǎo)致了 SubType.prototype.constructor
指向了SuperType(),因此,這行代碼的作用就是為了修正因?yàn)槔^承SuperType對(duì)象所有成員后,SubType的構(gòu)造器也指向了SuperType.

那么,為什么注釋掉也能正確調(diào)用SubType()構(gòu)造函數(shù)去實(shí)例化instance1呢?

雖然instance1.constructor ===SuperType() 返回true, 但對(duì)于執(zhí)行第12行來(lái)說(shuō),SubType.prototype實(shí)例化了
繼承來(lái)的父類的方法和屬性。在 instance1 = new SubType("heodnghui",22)中,instance1.__proto__由于
SubType.prototype指向了SuperType 而被修改為 SuperType。 因此也獲得了父類繼承來(lái)的屬性和方法
(盡管constructor也指向了SuperType)
 

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/88742.html

相關(guān)文章

  • 重新認(rèn)識(shí)JavaScript面向?qū)ο? 從ES5到ES6

    摘要:基于原型的面向?qū)ο笤诨谠偷恼Z(yǔ)言中如并不存在這種區(qū)別它只有對(duì)象不論是構(gòu)造函數(shù),實(shí)例,原型本身都是對(duì)象。允許動(dòng)態(tài)地向單個(gè)的對(duì)象或者整個(gè)對(duì)象集中添加或移除屬性。為了解決以上兩個(gè)問(wèn)題,提供了構(gòu)造函數(shù)創(chuàng)建對(duì)象的方式。 showImg(https://segmentfault.com/img/remote/1460000013229218); 一. 重新認(rèn)識(shí)面向?qū)ο?1. JavaScript...

    VishKozus 評(píng)論0 收藏0
  • 重新認(rèn)識(shí)JavaScript面向?qū)ο? 從ES5到ES6

    摘要:基于原型的面向?qū)ο笤诨谠偷恼Z(yǔ)言中如并不存在這種區(qū)別它只有對(duì)象不論是構(gòu)造函數(shù),實(shí)例,原型本身都是對(duì)象。允許動(dòng)態(tài)地向單個(gè)的對(duì)象或者整個(gè)對(duì)象集中添加或移除屬性。為了解決以上兩個(gè)問(wèn)題,提供了構(gòu)造函數(shù)創(chuàng)建對(duì)象的方式。 showImg(https://segmentfault.com/img/remote/1460000013229218); 一. 重新認(rèn)識(shí)面向?qū)ο?1. JavaScript...

    用戶83 評(píng)論0 收藏0
  • 前端面試題 -- JavaScript (一)

    摘要:前言前兩天總結(jié)了一下方面的面試題傳送門,今天翻看了一些面試中常見(jiàn)的幾個(gè)問(wèn)題只是一部分,會(huì)持續(xù)更新,分享給有需要的小伙伴,歡迎關(guān)注如果文章中有出現(xiàn)紕漏錯(cuò)誤之處,還請(qǐng)看到的小伙伴留言指正,先行謝過(guò)以下有哪些數(shù)據(jù)類型種原始數(shù)據(jù)類型布爾表示一個(gè)邏輯 前言 前兩天總結(jié)了一下HTML+CSS方面的面試題 (傳送門),今天翻看了一些 JavaScript 面試中常見(jiàn)的幾個(gè)問(wèn)題(只是一部分,會(huì)持續(xù)更新...

    junnplus 評(píng)論0 收藏0
  • JavaScript 原型中的哲學(xué)思想

    摘要:而作為構(gòu)造函數(shù),需要有個(gè)屬性用來(lái)作為以該構(gòu)造函數(shù)創(chuàng)造的實(shí)例的繼承。 歡迎來(lái)我的博客閱讀:「JavaScript 原型中的哲學(xué)思想」 記得當(dāng)年初試前端的時(shí)候,學(xué)習(xí)JavaScript過(guò)程中,原型問(wèn)題一直讓我疑惑許久,那時(shí)候捧著那本著名的紅皮書(shū),看到有關(guān)原型的講解時(shí),總是心存疑慮。 當(dāng)在JavaScript世界中走過(guò)不少旅程之后,再次萌發(fā)起研究這部分知識(shí)的欲望,翻閱了不少書(shū)籍和資料,才搞懂...

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

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

0條評(píng)論

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