JavaScript - 在对象'class'的实例中迭代对象

时间:2016-03-24 12:24:13

标签: javascript loops object

我正在尝试使用纯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”。

是否有更好的方法来循环遍历对象实例中的所有对象,或者是从我正在循环的对象中获取值的方法?

2 个答案:

答案 0 :(得分:4)

  

是否有更好的方法来循环遍历所有对象   对象的实例或从对象中获取值的方法   循环低谷?

因为您只是使用thisthis[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]);
        });
    };
}