成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript原型繼承中的 constructor

Steve_Wang_ / 369人閱讀

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

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

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

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

好了,下面我們來看看下面的繼承:

    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é)果。那么問題來了,這句話在原型繼承中的作用是什么呢?

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







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

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

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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88742.html

相關(guān)文章

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

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

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

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

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

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

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

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

    sugarmo 評論0 收藏0

發(fā)表評論

0條評論

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