问答详情
源自:3-3 [JavaScript]函数、switch、循环

请问为什么是打印出b,a啊,解释下原理。

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


提问者:今世缘0 2017-05-28 14:38

个回答

  • RCUBE
    2017-05-28 19:57:49
    已采纳

    运行时会先去本体的属性中去找,然后再去prototype中寻找。

    针对你的代码:

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

    这里a中属性只有你自己添加的b,所以肯定只会打印出b

  • RCUBE
    2017-05-28 20:14:31

    prototype 是一个可以向对象添加属性或者方法的属性,如果不用它,淡村的a=1,只是说明你定义了一个单个变量而已,所以肯定在输出实例化的A()方法时不会输出a

  • RCUBE
    2017-05-28 20:04:37

    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);
    }


  • 今世缘0
    2017-05-28 18:42:56

    function A() {}
    x = 1;
    var a = new A();
    a.b = 2;
    for (i in a) {
    console.log(i)
    }
    
    这样子怎麽只能打印出b啊?


  • 今世缘0
    2017-05-28 18:23:31

    我貌似知道了,不是因为顺序不确定。是因为它先会去找它自身拥有的属性,然后再去找原型链上的属性,是这样吧?还是因为其他原因?

  • 别秋景
    2017-05-28 18:07:22

    用一张课程截图给你解释吧http://img.mukewang.com/592aa1570001787312740588.jpg