亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

prototype和__proto__ ?

prototype和__proto__ ?

咕咕問 2016-11-12 08:47:47
function A(){};var a = new A();a.prototype == undefined????為什么,按照prototype來說,應該是 function A 才對???網上查的到有這樣說法所有的js對象里面都有一個匿名元素__proto__,指向的是當前對象的父元素的父元素(原型的原型),如果調用當前對象的方法中沒有這個方法,就會在當前對象的__proto__里面找,如果還沒有再往上找能給我講下prototype和__proto__不?
查看完整描述

3 回答

已采納
?
千秋此意

TA貢獻158條經驗 獲得超188個贊


1、new出來的實例對象其 __proto__ 指向其構造函數的prototype,即:

a.__proto__?===?A.prototype?//?true

2、a.__proto__ 和 A.prototype 指向同一個對象,這個對象有一個 constructor 屬性,其指向構造函數A本身。所以上面的也可以這樣寫:

a.__proto__?===?a.constructor.prototype?//?true
//??????????????這里a本身是沒有constructor這個屬性的,所以會訪問a.__proto__.constructor

3、然后是 prototype 這個屬性是只有函數對象才有的,一般的對象并沒有這個屬性,而對象的 __proto__ 所指向的還是一個普通的對象,整條原型鏈上的對象都不會有prototype屬性,所以就有了 a.prototype == undefined。




查看完整回答
3 反對 回復 2016-11-12
?
出世Sunny

TA貢獻5條經驗 獲得超5個贊

是你搞錯了,在這里a是沒有prototype的,prototype是構造器的原型,而a是通過構造器(new)產生的對象,這里A是構造器,a是new出來的對象,所以正確的是這樣

a.__proto__==A.prototype ? //true ? 這個可以自己在瀏覽器的控制臺試

也就是說構造器才有prototype,所有對象都有__proto__,這個可以控制臺一個一個往下試。


查看完整回答
反對 回復 2016-11-12
  • 3 回答
  • 4 關注
  • 1741 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號