国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

理解javaScript原型、原型鏈

NSFish / 1395人閱讀

摘要:構(gòu)造函數(shù)的屬性指向原型對(duì)象原型對(duì)象的屬性指向構(gòu)造函數(shù)實(shí)例對(duì)象的指向原型對(duì)象所有引用類型默認(rèn)都繼承了,而這個(gè)繼承也是通過(guò)原型鏈實(shí)現(xiàn)的。第一種方式是使用操作符,只要用這個(gè)操作符來(lái)測(cè)試實(shí)例與原型鏈中出現(xiàn)過(guò)的構(gòu)造函數(shù),結(jié)果就會(huì)返回。

理解對(duì)象
首先對(duì)象的定義是:“無(wú)序?qū)傩缘募希鋵傩钥梢园局怠?duì)象或者函數(shù)。”嚴(yán)格來(lái)講,
這就相當(dāng)于說(shuō)對(duì)象是一組沒(méi)有特定順序的值。對(duì)象的每個(gè)屬性或方法都有一個(gè)名字,而每個(gè)名字都映射到一個(gè)值。正因?yàn)檫@樣(以及其他將要討論的原因),我們可以把 ECMAScript 的對(duì)象想象成散列表:無(wú)非就是一組名值對(duì),其中值可以是數(shù)據(jù)或函數(shù)。
原型對(duì)象理解
1.創(chuàng)建的每個(gè)函數(shù)都有一個(gè) prototype(原型)屬性,這個(gè)屬性是一個(gè)指針,指向一個(gè)對(duì)象(原型對(duì)象), 而原型對(duì)象的用途是包含可以由特定類型的所有實(shí)例共享的屬性和方法。


2.創(chuàng)建一個(gè)新函數(shù),會(huì)根據(jù)一組特定的規(guī)則為該函數(shù)創(chuàng)建一個(gè) prototype 屬性(原型屬性),這個(gè)屬性指向函數(shù)的原型對(duì)象。在默認(rèn)情況下,所有原型對(duì)象都會(huì)自動(dòng)獲得一個(gè) constructor (構(gòu)造函數(shù)屬性)屬性,這個(gè)屬性包含一個(gè)指向 prototype 屬性所在函數(shù)的指針。就拿前面的例子來(lái)說(shuō), Person.prototype.constructor 指向 Person。而通過(guò)這個(gè)構(gòu)造函數(shù),我們還可繼續(xù)為原型對(duì)象添加其他屬性和方法

3.當(dāng)調(diào)用構(gòu)造函數(shù)創(chuàng)建一個(gè)新實(shí)例后,該實(shí)例的內(nèi)部將包含一個(gè)指針(內(nèi)部 屬性),指向構(gòu)造函數(shù)的原型對(duì)象。ECMA-262 第 5 版中管這個(gè)指針叫[[Prototype]]。雖然在腳本中 沒(méi)有標(biāo)準(zhǔn)的方式訪問(wèn)[[Prototype]],但 Firefox、Safari 和 Chrome 在每個(gè)對(duì)象上都支持一個(gè)屬性 proto;而在其他實(shí)現(xiàn)中,這個(gè)屬性對(duì)腳本則是完全不可見(jiàn)的。不過(guò),要明確的真正重要的一點(diǎn)就 是,這個(gè)連接存在于實(shí)例與構(gòu)造函數(shù)的原型對(duì)象之間,而不是存在于實(shí)例與構(gòu)造函數(shù)之間。Person 的每個(gè)實(shí)例—— person1 和 person2 都包含一個(gè)內(nèi)部屬性,該屬性僅僅指向了 Person.prototype;換句話說(shuō),它們 與構(gòu)造函數(shù)沒(méi)有直接的關(guān)系。

4.實(shí)現(xiàn)中都無(wú)法訪問(wèn)到[[Prototype]],

1>但可以通過(guò) isPrototypeOf()方法來(lái)確定對(duì)象之間是否存在這種關(guān)系。

2>ECMAScript 5增加了一個(gè)新方法,叫Object.getPrototypeOf(),在所有支持的實(shí)現(xiàn)中,這個(gè)方法返回[[Prototype]]的值。例如:

理解prototype、__proto__與constructor

1>__proto__和constructor屬性是對(duì)象所獨(dú)有的;prototype屬性是函數(shù)所獨(dú)有的,因?yàn)楹瘮?shù)也是一種對(duì)象,所以函數(shù)也擁有__proto__和constructor屬性。
2>__proto__屬性的作用就是當(dāng)訪問(wèn)一個(gè)對(duì)象的屬性時(shí),如果該對(duì)象內(nèi)部不存在這個(gè)屬性,那么就會(huì)去它的__proto__屬性所指向的那個(gè)對(duì)象(父對(duì)象)里找,一直找,直到__proto__屬性的終點(diǎn)**null**,然后返回undefined,再往上找就相當(dāng)于在null上取值,會(huì)報(bào)錯(cuò)。通過(guò)__proto__屬性將對(duì)象連接起來(lái)的這條鏈路即我們所謂的**原型鏈**。
3>prototype屬性的作用就是讓該函數(shù)所**實(shí)例化的對(duì)象**們都可以找到公用的屬性和方法,即f1.__proto__ === Foo.prototype。
4>constructor屬性的含義就是指向該**對(duì)象的構(gòu)造函數(shù)**,所有函數(shù)(此時(shí)看成對(duì)象了)最終的構(gòu)造函數(shù)都指向Function。

原型鏈
原型鏈?zhǔn)菍?shí)現(xiàn)繼承的主要方法。其基本思想是利用原型一個(gè)引用類型繼承另一個(gè)引用類型的屬性和方法
(構(gòu)造函數(shù))的prototype屬性指向(原型對(duì)象);
(原型對(duì)象)的constructor屬性指向(構(gòu)造函數(shù));
(實(shí)例對(duì)象)的[[Prototype]]/__proto__指向(原型對(duì)象)


1.所有引用類型默認(rèn)都繼承了 Object,而 這個(gè)繼承也是通過(guò)原型鏈實(shí)現(xiàn)的。大家要記住,所有函數(shù)的默認(rèn)原型都是 Object 的實(shí)例,因此默認(rèn)原 型都會(huì)包含一個(gè)內(nèi)部指針,指向 Object.prototype。這也正是所有自定義類型都會(huì)繼承 toString()、 valueOf()等默認(rèn)方法的根本原因。所以,我們說(shuō)上面例子展示的原型鏈中還應(yīng)該包括另外一個(gè)繼承層次

確定原型和實(shí)例的關(guān)系

可以通過(guò)兩種方式來(lái)確定原型和實(shí)例之間的關(guān)系。第一種方式是使用 instanceof 操作符,只要用 這個(gè)操作符來(lái)測(cè)試實(shí)例與原型鏈中出現(xiàn)過(guò)的構(gòu)造函數(shù),結(jié)果就會(huì)返回 true。以下幾行代碼就說(shuō)明了這 一點(diǎn)。


由于原型鏈的關(guān)系,我們可以說(shuō) instance 是 Object、SuperType 或 SubType 中任何一個(gè)類型 的實(shí)例。因此,測(cè)試這三個(gè)構(gòu)造函數(shù)的結(jié)果都返回了 true。
第二種方式是使用 isPrototypeOf()方法。同樣,只要是原型鏈中出現(xiàn)過(guò)的原型,都可以說(shuō)是該 原型鏈所派生的實(shí)例的原型,因此 isPrototypeOf()方法也會(huì)返回 true,如下所示。

參考文章

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/110165.html

相關(guān)文章

  • 如何理解JavaScript原型原型

    摘要:之前有朋友問(wèn)怎么去理解原型和原型鏈的問(wèn)題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級(jí),而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問(wèn)怎么去理解原型和原型鏈的問(wèn)題。這個(gè)問(wèn)題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...

    xuexiangjys 評(píng)論0 收藏0
  • 如何理解JavaScript原型原型

    摘要:之前有朋友問(wèn)怎么去理解原型和原型鏈的問(wèn)題。理解原型鏈的小技巧將箭頭視作泛化子類到父類關(guān)系那么圖中所有的虛線將構(gòu)成一個(gè)繼承層級(jí),而實(shí)線表示屬性引用。原型鏈?zhǔn)菍?shí)現(xiàn)繼承的重要方式,原型鏈的形成是真正是靠而非。 之前有朋友問(wèn)怎么去理解原型和原型鏈的問(wèn)題。這個(gè)問(wèn)題,在面試中,很多同學(xué)經(jīng)常都會(huì)遇到。這里給大家講講,方便大家記憶。 JavaScript的特點(diǎn)JavaScript是一門直譯式腳本...

    adie 評(píng)論0 收藏0
  • 【5】JavaScript 函數(shù)高級(jí)——原型原型深入理解(圖解)

    摘要:探索是如何判斷的表達(dá)式如果函數(shù)的顯式原型對(duì)象在對(duì)象的隱式原型鏈上,返回,否則返回是通過(guò)自己產(chǎn)生的實(shí)例案例案例重要注意的顯示原型和隱式原型是一樣的。面試題測(cè)試題測(cè)試題報(bào)錯(cuò)對(duì)照下圖理解 原型與原型鏈深入理解(圖解) 原型(prototype) 函數(shù)的 prototype 屬性(圖) 每個(gè)函數(shù)都有一個(gè)prototype屬性,它默認(rèn)指向一個(gè)Object空對(duì)象(即稱為:原型對(duì)象) 原型對(duì)象中有...

    馬龍駒 評(píng)論0 收藏0
  • 關(guān)于javascript中的原型原型

    摘要:先來(lái)一個(gè)構(gòu)造函數(shù)構(gòu)造一個(gè)人類實(shí)例化一個(gè)對(duì)象看看的名字是什么打印結(jié)果先說(shuō)一個(gè)前提只要是函數(shù),就會(huì)有一個(gè)屬性,可以理解為子代的原型遺傳基因只要是對(duì)象,就會(huì)有一個(gè)方法,可以理解為向上尋找原型的方法。 關(guān)于javascript中的原型和原型鏈 我GitHub上的菜鳥(niǎo)倉(cāng)庫(kù)地址: 點(diǎn)擊跳轉(zhuǎn)查看其他相關(guān)文章 文章在我的博客上的地址: 點(diǎn)擊跳轉(zhuǎn) ? ? ? ? 關(guān)于javascript中的原型和原...

    SmallBoyO 評(píng)論0 收藏0
  • 深入理解JavaScript系列5:強(qiáng)大的原型原型

    摘要:參考內(nèi)容關(guān)于本文本文轉(zhuǎn)自大叔的深入理解系列深入理解系列文章,包括了原創(chuàng),翻譯,轉(zhuǎn)載,整理等各類型文章,原文是大叔的一個(gè)非常不錯(cuò)的專題,現(xiàn)將其重新整理發(fā)布。 前言 JavaScript 不包含傳統(tǒng)的類繼承模型,而是使用 prototypal 原型模型。 雖然這經(jīng)常被當(dāng)作是 JavaScript 的缺點(diǎn)被提及,其實(shí)基于原型的繼承模型比傳統(tǒng)的類繼承還要強(qiáng)大。實(shí)現(xiàn)傳統(tǒng)的類繼承模型是很簡(jiǎn)單,但是...

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

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

0條評(píng)論

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