摘要:系列文章原型鏈原型鏈代碼如下內(nèi)存分析圖如下三個(gè)疑問(wèn)。的對(duì)象在找不到屬性或函數(shù)時(shí),會(huì)繼續(xù)從原型中找。這是原型鏈的基本機(jī)制。第三個(gè)問(wèn)題,中,因?yàn)槭钦{(diào)的,也就是,由于中沒(méi)有屬性,所以返回。這里涉及的知識(shí)雖然簡(jiǎn)單,但是整個(gè)的基礎(chǔ)。
系列文章
js原型鏈1
js原型鏈2
var person = function(name){ this.name = name }; person.prototype.getName = function(){ return this.name; } var zzz = new person("zzz"); console.log(zzz.getName()); // zzz console.log(zzz.__proto__.getName());// undefined內(nèi)存分析圖如下: 三個(gè)疑問(wèn)。
1. zzz.__ptoto__.getName()是undefined? 2. zzz.getName()有值? 3. zzz中沒(méi)有g(shù)etName函數(shù),為什么可以直接調(diào)用啊?分析問(wèn)題
下面對(duì)這三個(gè)問(wèn)題進(jìn)行一一解答:
首先說(shuō)第三個(gè)。js的對(duì)象在找不到屬性或函數(shù)時(shí),會(huì)繼續(xù)從原型中找。也就是zzz中沒(méi)有g(shù)etName函數(shù),但會(huì)從person的prototype中找,找到后,調(diào)用getName,由于是zzz.getName(),所以getName中的this依然是zzz,所以this.name是有值的。這是原型鏈的基本機(jī)制。
那么第二個(gè)問(wèn)題也就知道了。
第三個(gè)問(wèn)題,zzz.__proto__.getName()中,因?yàn)槭莦zz.__proto__調(diào)的getName,也就是person.prototype.getName,由于person.prototype中沒(méi)有name屬性,所以返回undefined。
這里涉及的知識(shí)雖然簡(jiǎn)單,但是整個(gè)js的基礎(chǔ)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/81697.html
摘要:從實(shí)現(xiàn)角度分析原型鏈歡迎來(lái)我的博客閱讀從實(shí)現(xiàn)角度分析原型鏈網(wǎng)上介紹原型鏈的優(yōu)質(zhì)文章已經(jīng)有很多了,比如說(shuō)作為補(bǔ)充,就讓我們換個(gè)角度,從實(shí)現(xiàn)來(lái)分析一下吧本文假設(shè)你對(duì)原型鏈已經(jīng)有所了解。 從實(shí)現(xiàn)角度分析js原型鏈 歡迎來(lái)我的博客閱讀:《從實(shí)現(xiàn)角度分析js原型鏈》 網(wǎng)上介紹原型鏈的優(yōu)質(zhì)文章已經(jīng)有很多了,比如說(shuō): https://github.com/mqyqingfeng/Blog/issu...
摘要:原型鏈和對(duì)象的原型是對(duì)象實(shí)例和它的構(gòu)造函數(shù)之間建立的鏈接,它的值是構(gòu)造函數(shù)的。對(duì)象的原型根據(jù)上文提到的構(gòu)造調(diào)用函數(shù)的時(shí)候會(huì)創(chuàng)建一個(gè)新對(duì)象,自動(dòng)將的原型指向構(gòu)造函數(shù)的對(duì)象。 showImg(https://segmentfault.com/img/remote/1460000020185197); JS的原型、原型鏈一直是比較難理解的內(nèi)容,不少初學(xué)者甚至有一定經(jīng)驗(yàn)的老鳥(niǎo)都不一定能完全說(shuō)清...
摘要:圖片描述缺點(diǎn)是無(wú)法實(shí)現(xiàn)多繼承可以在構(gòu)造函數(shù)中,為實(shí)例添加實(shí)例屬性。 對(duì)象的方法 Object.assign() 對(duì)象可以簡(jiǎn)寫(xiě) ,如果 key 和 value 相等則可以簡(jiǎn)寫(xiě) let name = xm; let age = 2; let obj = { name, age, fn(){ // 可以省略函數(shù)關(guān)鍵字和冒號(hào): console.log(2...
摘要:相當(dāng)于在用原型繼承編寫(xiě)復(fù)雜代碼前理解原型繼承模型十分重要。同時(shí),還要清楚代碼中原型鏈的長(zhǎng)度,并在必要時(shí)結(jié)束原型鏈,以避免可能存在的性能問(wèn)題。 js是一門(mén)動(dòng)態(tài)語(yǔ)言,js沒(méi)有類的概念,ES6 新增了class 關(guān)鍵字,但只是語(yǔ)法糖,JavaScript 仍舊是基于原型。 至于繼承,js的繼承與java這種傳統(tǒng)的繼承不一樣.js是基于原型鏈的繼承. 在javascript里面,每個(gè)對(duì)象都有一...
摘要:在使用的過(guò)程中,通過(guò)操作符為對(duì)象添加新屬性是很常見(jiàn)的操作。但是,這個(gè)操作的結(jié)果實(shí)際上會(huì)受到原型鏈上的同名屬性影響。通過(guò)它,可以做到操作符做不到的事情,比如為對(duì)象設(shè)置一個(gè)新屬性,即使它的原型鏈上已經(jīng)有一個(gè)的同名屬性。 在使用JavaScript的過(guò)程中,通過(guò)=操作符為對(duì)象添加新屬性是很常見(jiàn)的操作:obj.newProp = value;。但是,這個(gè)操作的結(jié)果實(shí)際上會(huì)受到原型鏈上的同名屬性...
摘要:原型對(duì)象是由創(chuàng)建的,因此原型對(duì)象的構(gòu)造函數(shù)是構(gòu)造函數(shù)也可以是稱為對(duì)象,原型對(duì)象也就繼承了其生父構(gòu)造函數(shù)中的數(shù)據(jù),也同時(shí)繼承了原型對(duì)象的數(shù)據(jù)。當(dāng)然這條原型鏈中的數(shù)據(jù),會(huì)被還是還是這類構(gòu)造函數(shù)繼承,但是不會(huì)被這些繼承,他們不處于同一個(gè)鏈條上。 js中,F(xiàn)unction的本質(zhì)是什么?Object的本質(zhì)又是什么?js中有幾條原型鏈? showImg(https://segmentfault.c...
閱讀 1261·2023-04-25 19:10
閱讀 1140·2021-09-10 10:50
閱讀 3029·2021-09-02 15:21
閱讀 1384·2019-08-30 15:52
閱讀 1681·2019-08-30 13:56
閱讀 2078·2019-08-30 12:53
閱讀 1870·2019-08-28 18:22
閱讀 2115·2019-08-26 13:47