JavaScript—在对象';类别';

JavaScript—在对象';类别';,javascript,loops,object,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

我试图使用纯JavaScript遍历对象实例中的所有对象

我试过这样的方法:

function a(){
    this.iterate = function(){
        for (var obj in this){
            console.log(obj);
        }
    }
}

var A = new a();
A.insertedValue = 20;
A.iterate();
执行此操作时,它只记录变量的名称,例如“insertedValue”,而不是记录insertedValue的“20”

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

有没有更好的方法来循环一个系统中的所有对象 一个对象的实例,或者一种从我正在处理的对象中获取值的方法 循环槽

因为您只是在
this
内部打印键,而不是使用
this[obj]
打印其值

成功

function a(){
    this.iterate = function(){
        for (var obj in this){
            console.log(this[obj]); //observe that this line has changed
        }
    }
}
有没有更好的方法来循环一个系统中的所有对象 一个对象的实例,或者一种从我正在处理的对象中获取值的方法 循环槽

因为您只是在
this
内部打印键,而不是使用
this[obj]
打印其值

成功

function a(){
    this.iterate = function(){
        for (var obj in this){
            console.log(this[obj]); //observe that this line has changed
        }
    }
}

您这样做在很大程度上是正确的,只是
for in
循环对象属性的名称,而不是它们的值。因此,要输出属性的值,请使用
this[name]

function a(){
    this.iterate = function(){
        for (var name in this){
            console.log(name + "=" + this[name]);
        }
    };
}
请注意,中的
将循环遍历对象的可枚举属性,包括它从原型继承的属性。如果您只想要自己的属性,而不是继承的属性,则可以通过
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]);
        });
    };
}

您这样做在很大程度上是正确的,只是
for in
循环对象属性的名称,而不是它们的值。因此,要输出属性的值,请使用
this[name]

function a(){
    this.iterate = function(){
        for (var name in this){
            console.log(name + "=" + this[name]);
        }
    };
}
请注意,
中的
将循环遍历对象的可枚举属性,包括它从原型继承的属性。如果您只想要自己的属性,而不是继承的属性,则可以通过
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]);
        });
    };
}

很酷,但是链接到这个类似圣经的答案就足够了:)@gurvinder372:好吧,这是关于通过数组和类似数组的东西循环,而不是对象。但是…:-)很酷,但是链接到这个类似圣经的答案就足够了:)@gurvinder372:好吧,这是关于通过数组和类似数组的东西循环,而不是对象。但是…:-)