为了账号安全,请及时绑定邮箱和手机立即绑定

请问为什么是打印出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下载
官方微信