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

来源:3-3 [JavaScript]函数、switch、循环

今世缘0

2017-05-28 14:38

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


写回答 关注

6回答

  • 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

    今世缘0

    function A() { x = 1; } var a = new A(); a.b = 2; for (i in a) { console.log(i) } 这样怎麽也是只有b呢?

    2017-05-28 20:03:21

    共 1 条回复 >

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

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

    今世缘0

    刚刚少说一句,应该是把a=1放在函数内。 即: function A() { x = 1; } var a = new A(); a.b = 2; for (i in a) { console.log(i) }

    2017-05-28 20:18:33

    共 1 条回复 >

  • 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

    恩恩,懂了,谢谢,还有个问题,能一起帮我解决了吗?就是把A.prototype.a=1变成a=1为什么又只有b输出呢?

    2017-05-28 20:07:58

    共 1 条回复 >

  • 今世缘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

JavaScript深入浅出

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

281112 学习 · 1020 问题

查看课程

相似问题