摘要:注是的一個(gè)方法,是中唯一一個(gè)處理屬性但是不查找原型鏈的函數(shù)。如果此時(shí)在該顯示屬性中還沒(méi)有找到,會(huì)繼續(xù)在的原型的原型中查找,找到直接終止,沒(méi)有找到一直向上找出,直到到達(dá)頂部會(huì)終止查找。
知識(shí)點(diǎn):
對(duì)象是一個(gè)屬性的集合,有顯示和隱式屬性,并且都擁有一個(gè)多帶帶的原型對(duì)象[prototype object], 一般用__proto__表示。
當(dāng)查找一個(gè)對(duì)象的屬性時(shí),JavaScript 會(huì)先在顯示屬性中查找,找不到會(huì)向上遍歷原型鏈,直到找到給定名稱(chēng)的屬性為止。到查找到達(dá)原型鏈的頂部——也就是 Object.__proto__ ,但是仍然沒(méi)有找到指定的屬性,就會(huì)返回 undefined。
注:
hasOwnProperty是Object.prototype的一個(gè)方法,?是 JavaScript 中唯一一個(gè)處理屬性但是不查找原型鏈的函數(shù)。
函數(shù)中prototype是一個(gè)顯示的屬性,創(chuàng)建實(shí)例對(duì)象(也就是new)的時(shí)候除了創(chuàng)建對(duì)象外,還做了另一件有用的事情——自動(dòng)為創(chuàng)建的新對(duì)象設(shè)置了原型對(duì)象(prototype object)。
例1:
var parent = { label:"parent" } var child = { name:"child" } //設(shè)置原型 child.__proto__ = parent; console.log(child.name); //child console.log(child.label); //parent
以上代碼中演示了對(duì)象屬性查找。當(dāng)訪問(wèn)child.name時(shí),name存在child顯示屬性中,終止查找返回字符串child。當(dāng)訪問(wèn)child.label時(shí),先在child的顯示屬性中查找,沒(méi)有找到然后在child的原型(child的原型__proto__為parent)中找,在child的原型中找到顯示屬性label,直接返回字符串parent。如果此時(shí)在該顯示屬性中還沒(méi)有找到,會(huì)繼續(xù)在child的原型(parent)的原型中查找,找到直接終止,沒(méi)有找到一直向上找出,直到到達(dá)頂部Object.__proto__會(huì)終止查找。
例2:
function Parent(){ } Parent.prototype.label = "parent"; var child = new Parent(); console.log(child.__proto__ === Parent.prototype); //true console.log(child.label); //parent
以上代碼中,prototype是Parent的顯示屬性。當(dāng)實(shí)例child(new Parent())的時(shí)候,先創(chuàng)建一個(gè)新對(duì)象,然后吧Parent中的prototype屬性賦值到新對(duì)象的__proto__屬性。當(dāng)訪問(wèn)child的label屬性時(shí),依據(jù)對(duì)象屬性查找的規(guī)則,現(xiàn)在child的顯示屬性中查找,沒(méi)有找到然后在child的原型(__proto__)中找(也就是Parent.prototype.label),這兒找到了然后直接終止返回字符串parent。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/91945.html
摘要:不理解沒(méi)關(guān)系,下面會(huì)結(jié)合圖例分析上一篇高級(jí)程序設(shè)計(jì)筆記創(chuàng)建對(duì)象下一篇高級(jí)程序設(shè)計(jì)筆記繼承參考之原型鏈的解讀三張圖搞懂的原型對(duì)象與原型鏈繼承與原型鏈 文章直接從原型圖解開(kāi)始的,如果對(duì)一些概念不太清除,可以結(jié)合后面幾節(jié)查看 1. 圖解原型鏈 1.1 鐵三角關(guān)系(重點(diǎn)) function Person() {}; var p = new Person(); showImg(https://s...
摘要:探索是如何判斷的表達(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ì)象(即稱(chēng)為:原型對(duì)象) 原型對(duì)象中有...
摘要:前言作為前端高頻面試題之一,相信很多小伙伴都有遇到過(guò)這個(gè)問(wèn)題。 前言 作為前端高頻面試題之一,相信很多小伙伴都有遇到過(guò)這個(gè)問(wèn)題。那么你是否清楚完整的了解它呢? 國(guó)際慣例,讓我們先拋出問(wèn)題: 什么是原型、原型鏈 它們有什么特點(diǎn) 它們能做什么 怎么確定它們的關(guān)系 或許你已經(jīng)有答案,或許你開(kāi)始有點(diǎn)疑惑,無(wú)論是 get 新技能或是簡(jiǎn)單的溫習(xí)一次,讓我們一起去探究一番吧 如果文章中有出現(xiàn)紕...
摘要:每一個(gè)由構(gòu)造函數(shù)創(chuàng)建的對(duì)象都會(huì)默認(rèn)的連接到該神秘對(duì)象上。在構(gòu)造方法中也具有類(lèi)似的功能,因此也稱(chēng)其為類(lèi)實(shí)例與對(duì)象實(shí)例一般是指某一個(gè)構(gòu)造函數(shù)創(chuàng)建出來(lái)的對(duì)象,我們稱(chēng)為構(gòu)造函數(shù)的實(shí)例實(shí)例就是對(duì)象。表示該原型是與什么構(gòu)造函數(shù)聯(lián)系起來(lái)的。 本文您將看到以下內(nèi)容: 傳統(tǒng)構(gòu)造函數(shù)的問(wèn)題 一些相關(guān)概念 認(rèn)識(shí)原型 構(gòu)造、原型、實(shí)例三角結(jié)構(gòu)圖 對(duì)象的原型鏈 函數(shù)的構(gòu)造函數(shù)Function 一句話說(shuō)明什么...
摘要:說(shuō)白了,原型就是構(gòu)造函數(shù)用來(lái)構(gòu)造新實(shí)例的模板對(duì)象。什么是原型鏈先回答什么是原型。例如這個(gè)原型的原型就是這個(gè)構(gòu)造函數(shù)的,既這個(gè)原型對(duì)象。這些原型對(duì)象通過(guò)像鏈子一樣連起來(lái),就叫做原型鏈。 原型鏈初步學(xué)習(xí) 這篇博客只是我初步理解原型鏈的一個(gè)個(gè)人學(xué)習(xí)筆記,寫(xiě)的比較粗略,且有的地方可能理解錯(cuò)誤. 更多更專(zhuān)業(yè)的關(guān)于原型鏈的解釋請(qǐng)看JavaScript深入之從原型到原型鏈和阮一峰的博客:Javas...
摘要:綜上所述有原型鏈繼承,構(gòu)造函數(shù)繼承經(jīng)典繼承,組合繼承,寄生繼承,寄生組合繼承五種方法,寄生組合式繼承,集寄生式繼承和組合繼承的優(yōu)點(diǎn)于一身是實(shí)現(xiàn)基于類(lèi)型繼承的最有效方法。 一、前言 繼承是面向?qū)ο螅∣OP)語(yǔ)言中的一個(gè)最為人津津樂(lè)道的概念。許多面對(duì)對(duì)象(OOP)語(yǔ)言都支持兩種繼承方式::接口繼承 和 實(shí)現(xiàn)繼承 。 接口繼承只繼承方法簽名,而實(shí)現(xiàn)繼承則繼承實(shí)際的方法。由于js中方法沒(méi)有簽名...
閱讀 1975·2021-09-23 11:21
閱讀 1748·2019-08-29 17:27
閱讀 1109·2019-08-29 17:03
閱讀 782·2019-08-29 15:07
閱讀 1999·2019-08-29 11:13
閱讀 2433·2019-08-26 12:14
閱讀 999·2019-08-26 11:52
閱讀 1778·2019-08-23 17:09