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

為了賬號安全,請及時綁定郵箱和手機立即綁定

請問為什么是打印出b,a啊,解釋下原理。

function?A()?{}
A.prototype.a?=?1;
var?a?=?new?A();
a.b?=?2;
for?(i?in?a)?{
console.log(i)
}


正在回答

6 回答

運行時會先去本體的屬性中去找,然后再去prototype中尋找。

針對你的代碼:

function?A()?{}
x?=?1;
var?a?=?new?A();
a.b?=?2;
for?(i?in?a)?{
console.log(i)
}

這里a中屬性只有你自己添加的b,所以肯定只會打印出b

0 回復 有任何疑惑可以回復我~
#1

今世緣0 提問者

function A() { x = 1; } var a = new A(); a.b = 2; for (i in a) { console.log(i) } 這樣怎麼也是只有b呢?
2017-05-28 回復 有任何疑惑可以回復我~

prototype 是一個可以向對象添加屬性或者方法的屬性,如果不用它,淡村的a=1,只是說明你定義了一個單個變量而已,所以肯定在輸出實例化的A()方法時不會輸出a

0 回復 有任何疑惑可以回復我~
#1

今世緣0 提問者

剛剛少說一句,應該是把a=1放在函數內。 即: function A() { x = 1; } var a = new A(); a.b = 2; for (i in a) { console.log(i) }
2017-05-28 回復 有任何疑惑可以回復我~
function?A()?{}
A.prototype.a?=?1;
var?aa?=?new?A();
document.write(aa.a);//aa是方法A()的示例,擁有使用?prototype?屬性來向對象添加的屬性a,輸出1
aa.b?=?2;
document.write(aa.b);//在給aa添加了一個b的屬性后,輸出b的值2
//運行時會先去本體的屬性中去找,然后再去prototype中尋找,所以先輸出b,后輸出a
for?(i?in?aa)?{
????document.write(i);
}


2 回復 有任何疑惑可以回復我~
#1

今世緣0 提問者

恩恩,懂了,謝謝,還有個問題,能一起幫我解決了嗎?就是把A.prototype.a=1變成a=1為什么又只有b輸出呢?
2017-05-28 回復 有任何疑惑可以回復我~
function?A()?{}
x?=?1;
var?a?=?new?A();
a.b?=?2;
for?(i?in?a)?{
console.log(i)
}

這樣子怎麼只能打印出b???


0 回復 有任何疑惑可以回復我~

我貌似知道了,不是因為順序不確定。是因為它先會去找它自身擁有的屬性,然后再去找原型鏈上的屬性,是這樣吧?還是因為其他原因?

0 回復 有任何疑惑可以回復我~

用一張課程截圖給你解釋吧http://img1.sycdn.imooc.com//592aa1570001787312740588.jpg

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

請問為什么是打印出b,a啊,解釋下原理。

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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