1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
o.prototype = oo應(yīng)該是o.__proto__ (書(shū)里可能是這么寫(xiě)的[[Prototype]])= oo;
console.log(o.prototype === oo);//這里怎么和getPrototypeOf()得到的結(jié)果不同呢?
同樣這也應(yīng)該是o.__proto__ === oo
。getPrototypeOf()
的意思是獲取目標(biāo)對(duì)象的原型對(duì)象。o.prototype
是獲取o對(duì)象的prototype
屬性,是undefined,你要明白實(shí)例的隱式原型__proto__指向其原型對(duì)象,而直接訪問(wèn)實(shí)例的原型對(duì)象屬性是訪問(wèn)不到的。
原型鏈的查找過(guò)程也是先查找自身,再去自身的__proto__屬性指向的對(duì)象查找。 比如:a是A的實(shí)例。a.b1.先在自身查找b屬性,無(wú)。查找a.__proto__; 2.a.__proto__指向A.prototype; 3.在A.prototype上查找b屬性,無(wú)。查找A.prototype.__proto__; 4.因?yàn)锳.prototype是對(duì)象,則是對(duì)象構(gòu)造函數(shù)Object的實(shí)例,所以A.prototype.__proto__指向Object.prototype; 5.在Object.prototype上查找b屬性,無(wú)則不找返回undefined; 6.為什么不找了呢,可以這么理解,Object.prototype是對(duì)象構(gòu)造函數(shù)Object的實(shí)例,又返回第四條了,所以O(shè)bject.prototype無(wú)__proto__屬性。
所有函數(shù)的__proto__都默認(rèn)指向Function(){}的prototype;
所有對(duì)象的__proto__都默認(rèn)指向Object(){}的prototype;(上邊的第4步)
補(bǔ)充:函數(shù)才有prototype屬性,普通對(duì)象只有__proto__,此屬性的內(nèi)容是實(shí)例的原型對(duì)象。實(shí)例的__proto__指向此原型對(duì)象。
寫(xiě)的有點(diǎn)亂。
添加回答
舉報(bào)