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

資訊專欄INFORMATION COLUMN

一次性搞懂js中的原型與原型鏈

Freeman / 408人閱讀

摘要:每個(gè)原型都有一個(gè)屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)由于實(shí)例對(duì)象可以繼承原型對(duì)象的屬性,所以實(shí)例對(duì)象也擁有屬性,同樣指向原型對(duì)象對(duì)應(yīng)的構(gòu)造函數(shù)。

構(gòu)造函數(shù):function Foo ( ) { };

實(shí)例對(duì)象:let f1=new Foo;

談到繼承時(shí),JavaScript 只有一種結(jié)構(gòu):對(duì)象

每個(gè)函數(shù)都有 prototype 屬性,除了 Function.prototype.bind(),該屬性指向原型。

prototype
每一個(gè)JavaScript對(duì)象(null除外)在創(chuàng)建的時(shí)候就會(huì)與之關(guān)聯(lián)另一個(gè)對(duì)象,這個(gè)對(duì)象就是我們所說(shuō)的原型,每一個(gè)對(duì)象都會(huì)從原型"繼承"屬性。

函數(shù)的 prototype 屬性指向了一個(gè)對(duì)象,這個(gè)對(duì)象正是調(diào)用該構(gòu)造函數(shù)而創(chuàng)建的實(shí)例的原型,也就是這個(gè)例子中的 f1 的原型。prototype帶有__proto__和constructor

proto
每一個(gè)JavaScript對(duì)象(除了 null )都具有的一個(gè)屬性,叫__proto__,這個(gè)屬性會(huì)指向了創(chuàng)建該對(duì)象的構(gòu)造函數(shù)的原型。
console.log(f1._proto_ === Foo.prototype) // true
constructor
每個(gè)原型都有一個(gè) constructor 屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)

由于實(shí)例對(duì)象可以繼承原型對(duì)象的屬性,所以實(shí)例對(duì)象也擁有constructor屬性,同樣指向原型對(duì)象對(duì)應(yīng)的構(gòu)造函數(shù)。

console.log(Foo.prototype.constructor === Foo);//true
console.log(f1.constructor === Foo);//true
console.log(f1.hasOwnProperty("constructor"));//false
原型鏈

JS在創(chuàng)建對(duì)象(不論是普通對(duì)象還是函數(shù)對(duì)象)的時(shí)候,都有一個(gè)叫做__proto__的內(nèi)置屬性,用于指向創(chuàng)建它的函數(shù)對(duì)象的原型對(duì)象prototype。以上面的例子為例:

console.log(fo.__proto__  === Foo.prototype)  //true

同樣Foo.prototype也有proto屬性

console.log(Foo.prototype.__proto__ === Object.prototype)  //true

Object.prototype對(duì)象也有proto屬性,但它比較特殊,為null

console.log(Object.prototype.__proto__ === null)

我們把這個(gè)有proto串起來(lái)的直到Object.prototype.proto為null的鏈叫做原型鏈。原型鏈的形成是真正是靠proto 而非prototype

總結(jié)

每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象

Foo.prototype

原型對(duì)象都包含一個(gè)指向構(gòu)造函數(shù)的指針

Foo.prototype.constructor === Foo

實(shí)例都包含一個(gè)指向原型對(duì)象的內(nèi)部指針

fo.__proto__  === Foo.prototype

更多文章請(qǐng)前往語(yǔ)雀

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

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

相關(guān)文章

  • 一張圖讓自己搞懂(mēng)原型&原型

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

    CntChen 評(píng)論0 收藏0
  • 徹底搞懂JavaScript中的繼承

    摘要:這正是我們想要的太棒了毫不意外的,這種繼承的方式被稱為構(gòu)造函數(shù)繼承,在中是一種關(guān)鍵的實(shí)現(xiàn)的繼承方法,相信你已經(jīng)很好的掌握了。 你應(yīng)該知道,JavaScript是一門基于原型鏈的語(yǔ)言,而我們今天的主題 -- 繼承就和原型鏈這一概念息息相關(guān)。甚至可以說(shuō),所謂的原型鏈就是一條繼承鏈。有些困惑了嗎?接著看下去吧。 一、構(gòu)造函數(shù),原型屬性與實(shí)例對(duì)象 要搞清楚如何在JavaScript中實(shí)現(xiàn)繼承,...

    _ivan 評(píng)論0 收藏0
  • 搞懂 Javascript中this 指向及繼承原理

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

    why_rookie 評(píng)論0 收藏0
  • 關(guān)于JS原型的理解。

    摘要:的原型鏈,需要深刻的研究才能搞懂。對(duì)象都是通過(guò)函數(shù)即構(gòu)造函數(shù)創(chuàng)建的。即這里的成為隱式原型。而構(gòu)造函數(shù)的屬性指向自身。這個(gè)對(duì)象的構(gòu)造函數(shù)的是一個(gè)對(duì)象。走到原型鏈的終結(jié)。 - JS是一個(gè)非常有魅力的語(yǔ)言也是一個(gè)比較煩人的語(yǔ)言,主要就是因?yàn)樗奶厥庑造`活性。 JS的原型鏈,需要深刻的研究才能搞懂。不要糾結(jié)細(xì)節(jié)吧。實(shí)在不行就按這個(gè)死背住,慢慢就理解了??傊删褪且痪湓捜f(wàn)物皆對(duì)象。 結(jié)合這個(gè)圖示...

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

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

0條評(píng)論

Freeman

|高級(jí)講師

TA的文章

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