如何迭代对象的原型属性

时间:2013-09-24 17:33:42

标签: javascript prototype prototype-chain

我有一些代码:

var obj = function() { }; // functional object
obj.foo = 'foo';
obj.prototype.bar = 'bar';

for (var prop in obj) {
    console.log(prop);
}

让我感到惊讶的是,记录的所有内容都是foo。我希望for循环也可以迭代obj原型的属性(即bar),因为我没有检查hasOwnProperty。我在这里错过了什么?是否有一种惯用的方法来迭代原型中的所有属性?

我在Chrome和IE10中对此进行了测试。

提前致谢。

2 个答案:

答案 0 :(得分:6)

您正在迭代构造函数的属性,您必须创建一个实例。该实例是继承自构造函数的prototype属性:

var Ctor = function() { }; // constructor function
Ctor.prototype.bar = 'bar';
var obj = new Ctor(); // instantiation

// adds own property to instance
obj.foo = 'foo';

// logs foo and bar
for (var prop in obj) {
    console.log(prop); 
}

答案 1 :(得分:0)

如果要通过在对象实例化之前定义所有属性来维护继承层次结构,则可以遵循以下方法。这种方法打印原型层次链。

注意:在这种方法中,您最初不必创建构造函数。

add     rd, rs, zero