function A() {} A.prototype.a = 1; var a = new A(); a.b = 2; for (i in a) { console.log(i) }
运行时会先去本体的属性中去找,然后再去prototype中寻找。
针对你的代码:
function A() {} x = 1; var a = new A(); a.b = 2; for (i in a) { console.log(i) }
这里a中属性只有你自己添加的b,所以肯定只会打印出b
prototype 是一个可以向对象添加属性或者方法的属性,如果不用它,淡村的a=1,只是说明你定义了一个单个变量而已,所以肯定在输出实例化的A()方法时不会输出a
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); }
function A() {} x = 1; var a = new A(); a.b = 2; for (i in a) { console.log(i) } 这样子怎麽只能打印出b啊?
我貌似知道了,不是因为顺序不确定。是因为它先会去找它自身拥有的属性,然后再去找原型链上的属性,是这样吧?还是因为其他原因?
用一张课程截图给你解释吧