我正在尝试使用纯JavaScript迭代对象实例中的所有对象。
我试过这样的事情:
function a(){
this.iterate = function(){
for (var obj in this){
console.log(obj);
}
}
}
var A = new a();
A.insertedValue = 20;
A.iterate();
执行此操作时,不是为insertedValue记录例如“20”,而只是记录变量的名称,如“insertedValue”。
是否有更好的方法来循环遍历对象实例中的所有对象,或者是从我正在循环的对象中获取值的方法?
答案 0 :(得分:4)
是否有更好的方法来循环遍历所有对象 对象的实例或从对象中获取值的方法 循环低谷?
因为您只是使用this
在this[obj]
内打印密钥而不是其值。
成功
function a(){
this.iterate = function(){
for (var obj in this){
console.log(this[obj]); //observe that this line has changed
}
}
}
答案 1 :(得分:1)
你这样做的方式基本上是正确的,只是for-in
遍历对象属性的名称,而不是它们的值。因此,要输出属性的值,请使用this[name]
:
function a(){
this.iterate = function(){
for (var name in this){
console.log(name + "=" + this[name]);
}
};
}
请注意,for-in
将遍历对象的可枚举属性,包括它从其原型继承的属性。如果您只想要拥有属性而不是继承属性,则可以通过hasOwnProperty
检查该属性是否属于“自己的”属性:
function a(){
this.iterate = function(){
for (var name in this){
if (this.hasOwnProperty(name)) {
console.log(name + "=" + this[name]);
}
}
};
}
或者使用方便的Object.keys
,它会为您提供一系列自己的可枚举属性:
function a(){
this.iterate = function(){
Object.keys(this).forEach(function(name) {
console.log(name + "=" + this[name]);
});
};
}