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

資訊專欄INFORMATION COLUMN

js原型和原型鏈

Winer / 1437人閱讀

摘要:幾乎所有對象在創(chuàng)建的時候都會生成鏈,就是人們常說的原型鏈,當你試圖引用對象的屬性時,會觸發(fā)對象的操作,對于默認的操作來說,第一步就是去查找當前的對象中有沒有你要引用的屬性,如果有就會使用它,如果沒有找到,就會去查找這個對象的原型鏈,舉個例子

[[Prototype]]

幾乎所有對象在創(chuàng)建的時候都會生成[[Prototype]]鏈,就是人們常說的原型鏈,當你試圖引用對象的屬性時,會觸發(fā)對象的[[Get]]操作,對于默認的[[Get]]操作來說,第一步就是去查找當前的對象中有沒有你要引用的屬性,如果有就會使用它,如果沒有找到,就會去查找這個對象的原型鏈,舉個例子:

var one = {
  type: "one"
}

var two = Object.create(one)

console.log(two.type) // one

在上述例子中,two對象中并沒有type屬性,但是由于Object.create(創(chuàng)建一個新對象,帶著指定的原型對象和屬性)將one對象和two對象聯(lián)系到一起,因此在原型鏈的查找過程中,即便在two對象中沒有找到type屬性,會繼續(xù)向上查找,在one對象中查找到type屬性并打印,如果沿著原型鏈一直向上查找都沒有找到,則會打印undefined

prototype

要講清楚prototype是什么先舉一個簡單的例子:

function origin(type) {
  this.type = type
  console.log(this.type)
}
origin.prototype.name = "origin"
var son1 = new origin("male")
var son2 = new origin("male")
console.log(son1.name) // origin
console.log(son2.name) // origin

函數(shù)origin的prototype屬性實際上相當與一個對象,這個對象指向?qū)嵗齭on1和son2的原型對象,因此,當調(diào)用name屬性,會沿著原型鏈一直向上找,輸出origin.prototype.name的值,簡單來說,函數(shù)的prototype對象會指向?qū)嵗脑?,從另一個角度上來說,也可以說son1和son2繼承了函數(shù)origin的prototype對象

constructor

先看一個簡單的例子:

function origin() {

}
const son = new origin()
console.log(origin.prototype.constructor === origin) // true
console.log(son.constructor === origin) // true

origin.prototype默認有一個公有并且不可枚舉的屬屬性,constructor,并且這個屬性引用的是對象關(guān)聯(lián)的函數(shù),因此origin.prototype.construct = origin,同時實例對象son也有一個construcor屬性,指向創(chuàng)建這個對象的函數(shù)

_proto_

__proto__其實是一個絕大多數(shù)瀏覽器支持的用來訪問內(nèi)部原型鏈的一個屬性

    son.__proto__ === origin.prototype // true

當調(diào)用son.__proto__實際上調(diào)用了son.__proto__(),返回值和Object.getPrototypeOf(origin)結(jié)果相同

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

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

相關(guān)文章

  • JS基礎(chǔ)-原型、原型真的不能一知半解

    摘要:原型鏈和對象的原型是對象實例和它的構(gòu)造函數(shù)之間建立的鏈接,它的值是構(gòu)造函數(shù)的。對象的原型根據(jù)上文提到的構(gòu)造調(diào)用函數(shù)的時候會創(chuàng)建一個新對象,自動將的原型指向構(gòu)造函數(shù)的對象。 showImg(https://segmentfault.com/img/remote/1460000020185197); JS的原型、原型鏈一直是比較難理解的內(nèi)容,不少初學(xué)者甚至有一定經(jīng)驗的老鳥都不一定能完全說清...

    changfeng1050 評論0 收藏0
  • js原型 原型 原型的繼承

    摘要:圖片描述缺點是無法實現(xiàn)多繼承可以在構(gòu)造函數(shù)中,為實例添加實例屬性。 對象的方法 Object.assign() 對象可以簡寫 ,如果 key 和 value 相等則可以簡寫 let name = xm; let age = 2; let obj = { name, age, fn(){ // 可以省略函數(shù)關(guān)鍵字和冒號: console.log(2...

    soasme 評論0 收藏0
  • 從實現(xiàn)角度分析js原型

    摘要:從實現(xiàn)角度分析原型鏈歡迎來我的博客閱讀從實現(xiàn)角度分析原型鏈網(wǎng)上介紹原型鏈的優(yōu)質(zhì)文章已經(jīng)有很多了,比如說作為補充,就讓我們換個角度,從實現(xiàn)來分析一下吧本文假設(shè)你對原型鏈已經(jīng)有所了解。 從實現(xiàn)角度分析js原型鏈 歡迎來我的博客閱讀:《從實現(xiàn)角度分析js原型鏈》 網(wǎng)上介紹原型鏈的優(yōu)質(zhì)文章已經(jīng)有很多了,比如說: https://github.com/mqyqingfeng/Blog/issu...

    CompileYouth 評論0 收藏0
  • 溫故js系列(15)-原型&原型&原型繼承

    摘要:給添加屬性給的原型對象添加屬性原型鏈在中,每個對象都有一個屬性,其保存著的地址就構(gòu)成了對象的原型鏈。實例變量實例函數(shù)原型鏈繼承有了原型鏈,就可以借助原型鏈實現(xiàn)繼承。是中唯一一個處理屬性但是不查找原型鏈的函數(shù)。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:原型&原型鏈&原型繼承 JavaScript-原...

    Ethan815 評論0 收藏0
  • JS面向?qū)ο蟮某绦蛟O(shè)計之繼承的實現(xiàn) - 原型

    摘要:簡單回顧一下構(gòu)造函數(shù)原型和實例對象之間的關(guān)系每個構(gòu)造函數(shù)都有一個原型對象。找到生成構(gòu)造函數(shù)的原型對象的構(gòu)造函數(shù),搜索其原型對象,找到了。 JS面向?qū)ο蟮某绦蛟O(shè)計之繼承的實現(xiàn) - 原型鏈 前言:最近在細讀Javascript高級程序設(shè)計,對于我而言,中文版,書中很多地方翻譯的差強人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯誤,會非常感謝您的指出。文中絕大部分內(nèi)容引用自《JavaS...

    zhaochunqi 評論0 收藏0
  • 【前端基礎(chǔ)進階】JS原型、原型、對象詳解

    摘要:二構(gòu)造函數(shù)我們先復(fù)習(xí)一下構(gòu)造函數(shù)的知識上面的例子中和都是的實例。這兩個實例都有一個構(gòu)造函數(shù)屬性,該屬性是一個指針指向。原型鏈其中是對象的實例。 一. 普通對象與函數(shù)對象 JavaScript 中,萬物皆對象!但對象也是有區(qū)別的。分為普通對象和函數(shù)對象,Object 、Function 是 JS 自帶的函數(shù)對象。下面舉例說明 var o1 = {}; var o2 =new Objec...

    explorer_ddf 評論0 收藏0

發(fā)表評論

0條評論

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