我有一些代码:
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中对此进行了测试。
提前致谢。
答案 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