javascript - 如何理解prototype和__proto__的區(qū)別呢?
問(wèn)題描述
如何理解prototype和__proto__的區(qū)別呢?
問(wèn)題解答
回答1:構(gòu)造函數(shù)訪(fǎng)問(wèn)原型時(shí),通常通過(guò)prototype來(lái)訪(fǎng)問(wèn),例如我們往原型上添加方法
Person.prototype.getName = function() {}
當(dāng)new出來(lái)的實(shí)例訪(fǎng)問(wèn)原型時(shí),在一些支持的瀏覽器中
function Person() {}var p1 = new Person();p1.__proto__ === Person.prototype // true
結(jié)論:prototype是作為構(gòu)造函數(shù)去訪(fǎng)問(wèn)原型,而__proto__是作為實(shí)例去訪(fǎng)問(wèn)原型。當(dāng)自身身份不一樣,即使一個(gè)方法同時(shí)調(diào)用兩者時(shí),訪(fǎng)問(wèn)到的可能是不同的原型。
回答2:每個(gè)對(duì)象都有__proto__,而prototype只有Function有;
回答3:也許你也可以看看這些:
/a/11...
https://developer.mozilla.org...
https://developer.mozilla.org...
回答4:prototype 是構(gòu)造函數(shù)的一個(gè)屬性,__proto__ 是實(shí)例的一個(gè)屬性。使用構(gòu)造函數(shù)生成的實(shí)例的 __proto__ 屬性會(huì)指向構(gòu)造函數(shù) prototype 屬性所指向的對(duì)象。
嗯,就是這樣。
回答5:從作用上來(lái)說(shuō):prototype 確定了當(dāng)利用構(gòu)造器或字面量形式定義對(duì)象時(shí) proto 的默認(rèn)值
proto 是 js 引擎原型鏈搜索的依據(jù)
所以重點(diǎn)在于當(dāng)你要更改原型鏈的搜索方式時(shí),可以通過(guò)更改構(gòu)造器 prototype 來(lái)改變后續(xù)所有實(shí)例化對(duì)象的原型鏈查找方式,利用 proto 來(lái)修改單個(gè)對(duì)象的原型鏈查找.
相關(guān)文章:
1. javascript - 微信h5發(fā)送圖文信息,部分設(shè)備點(diǎn)擊“發(fā)送”按鈕時(shí)沒(méi)反應(yīng),問(wèn)題較難重現(xiàn),如何能找到可能存在問(wèn)題的點(diǎn)?2. objective-c - 做一個(gè)百度地圖定位的demo,結(jié)果出錯(cuò)好多。3. 微信小程序session無(wú)法緩存的問(wèn)題4. java-web - Java WEB:什么樣的jar包必須放到WEB-INF下?有些包放外面tomcat就起不來(lái)5. javascript - 關(guān)于微信授權(quán)的問(wèn)題。6. java - 輸出4個(gè)不相等整數(shù)之間所有任意三個(gè)整數(shù)的乘積7. css - 如何使用 vue transition 實(shí)現(xiàn) ios 按鈕一樣的平滑切換效果8. 如何使用Java1.8編譯1.6JVM可運(yùn)行的class文件9. angular.js - 公眾號(hào)H5頁(yè)面 angularjs 怎么動(dòng)態(tài)修改title值(微信6.5.5,動(dòng)態(tài)修改不行 6.5.7闊以)10. node.js - 如何在服務(wù)器部署vuejs項(xiàng)目?
