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

資訊專欄INFORMATION COLUMN

徹底搞懂js里的__proto__和prototype到底有什么區(qū)別?

honhon / 1421人閱讀

摘要:即對象具有屬性,可稱為隱式原型,一個對象的隱式原型指向構(gòu)造該對象的構(gòu)造函數(shù)的原型,這也保證了實例能夠訪問在構(gòu)造函數(shù)原型中定義的屬性和方法。重點隱式原型指向構(gòu)造該對象的構(gòu)造函數(shù)的原型。

1.在JS里,萬物皆對象。方法(Function)是對象,方法的原型(Function.prototype)是對象。因此,它們都會具有對象共有的特點。即:對象具有屬性proto,可稱為隱式原型,一個對象的隱式原型指向構(gòu)造該對象的構(gòu)造函數(shù)的原型,這也保證了實例能夠訪問在構(gòu)造函數(shù)原型中定義的屬性和方法。
2.方法(Function)方法這個特殊的對象,除了和其他對象一樣有上述proto屬性之外,還有自己特有的屬性——原型屬性(prototype),這個屬性是一個指針,指向一個對象,這個對象的用途就是包含所有實例共享的屬性和方法(我們把這個對象叫做原型對象)。原型對象也有一個屬性,叫做constructor,這個屬性包含了一個指針,指回原構(gòu)造函數(shù)。
1.1
首先聲明一個對象和一個函數(shù),console.log一下對象和函數(shù)的proto
var A = function () {};
var B ={};

console.log(A.__proto__)
console.log(B.__proto__)
控制臺輸出結(jié)果如下圖所示:

剛才不是說函數(shù)是對象嗎?它們的proto為啥不一樣?往下看,別著急。
var A = function () {};
var B ={};
console.log(A.__proto__.__proto__)
console.log(B.__proto__)
console.log結(jié)果如下:

是不是一樣了,,確實有點懵逼啊。。重點 隱式原型指向構(gòu)造該對象的構(gòu)造函數(shù)的原型。因為function是特殊的對象,A.proto就指向了構(gòu)造該函數(shù)的一個函數(shù)(隨意起個名字 C),C的proto就指向了和B對象一樣的proto。。我自己都懵逼了。
1.2一個對象和一個函數(shù),console.log一下對象和函數(shù)的prototype
var A = function () {};
var B ={};
console.log(A.prototype)
console.log(B.prototype)
console.log結(jié)果如下:

對象并不具有prototype屬性,只有函數(shù)才有prototype屬性。這就證明聲明2的說法是正確的。
總結(jié):
js里所有的對象都有proto屬性(對象,函數(shù)),指向構(gòu)造該對象的構(gòu)造函數(shù)的原型。
只有函數(shù)function才具有prototype屬性。這個屬性是一個指針,指向一個對象,這個對象的用途就是包含所有實例共享的屬性和方法(我們把這個對象叫做原型對象)。原型對象也有一個屬性,叫做constructor,這個屬性包含了一個指針,指回原構(gòu)造函數(shù)。

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

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

相關(guān)文章

  • 淺析JavaScript中原型及constructor、__proto__、prototype的關(guān)系

    摘要:搞清了構(gòu)造函數(shù)和原型的區(qū)別后,就可以繼續(xù)了。指向構(gòu)造函數(shù)的原型對象,存在于實例與構(gòu)造函數(shù)的原型對象之間。要注意的是當(dāng)我們使用下面這種將整個重寫的情況時,會切斷構(gòu)造函數(shù)和原型之間的聯(lián)系,也就是說不再指向了,而是指向。 前言 先說一說為什么要搞清楚JavaScript的原型,因為這就是JS的根。JavaScript雖然不是一門傳統(tǒng)的面向?qū)ο笳Z言,但它有自己的類和繼承機制,最重要的就是它采用...

    wenzi 評論0 收藏0
  • 如何繼承Date對象?由一道題徹底弄懂JS繼承。

    摘要:前言見解有限,如有描述不當(dāng)之處,請幫忙及時指出,如有錯誤,會及時修正。倘若用的是中文搜索。所以最終的實例對象仍然能進(jìn)行正常的原型鏈回溯,回溯到原本的所有原型方法這樣通過一個巧妙的欺騙技巧,就實現(xiàn)了完美的繼承。 前言 見解有限,如有描述不當(dāng)之處,請幫忙及時指出,如有錯誤,會及時修正。 20180201更新: 修改用詞描述,如組合寄生式改成寄生組合式,修改多處筆誤(感謝@Yao Ding的...

    sunnyxd 評論0 收藏0
  • 一張圖讓自己搞懂(mēng)原型&原型鏈

    摘要:要搞清這三種關(guān)系指向之間的關(guān)系拗口,其實也就是要搞懂,構(gòu)造函數(shù)由構(gòu)造函數(shù)操作創(chuàng)造出的實例對象和構(gòu)造函數(shù)的原型對象之間的關(guān)系。 寫在前面 這篇博客來源于,有天mentor突然傳給我了這張祖?zhèn)鞯膱D片,并且發(fā)誓一定要給我講清楚,然鵝在他的一番激情講解之后,他自己也被繞懵了...于是后來我決定整理一下似乎還有點清晰的思路,記錄一下我對這張圖的理解。作為一個小白,對于js中這些比較復(fù)雜的概念的理...

    CntChen 評論0 收藏0
  • 搞懂 Javascript中this 指向及繼承原理

    摘要:共享原型鏈現(xiàn)在我們還有另一個對象如圖那么和其實是同一東西,也就是。改進(jìn)通過第一節(jié)可以知道,我們可以通過原型鏈來解決重復(fù)創(chuàng)建的問題我們先創(chuàng)建一個士兵原型,然后讓士兵的指向士兵原型。所以這個是原型鏈繼承的缺點,原因是和指向同一個地址即父類的。 在理解繼承之前,需要知道 js 的三個東西: 什么是 JS 原型鏈 this 的值到底是什么 JS 的new 到底是干什么的 想閱讀更多優(yōu)質(zhì)文章...

    why_rookie 評論0 收藏0
  • 關(guān)于javascript的原型原型鏈,看我就夠了(二)

    摘要:原文鏈接關(guān)于的原型和原型鏈,看我就夠了一參考鏈接闖關(guān)記之原型及原型鏈之原型與原型鏈一篇文章帶你理解原型和原型鏈徹底理解原型鏈一的默認(rèn)指向圖解和的三角關(guān)系原型和原型鏈三張圖搞懂的原型對象與原型鏈 溫故 創(chuàng)建對象的三種方式 通過對象直接量 通過new創(chuàng)建對象 通過Object.create() js中對象分為兩種 函數(shù)對象 普通對象 仔細(xì)觀察如下代碼 function Foo(na...

    eccozhou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<