【问题标题】:JavaScript - Iterating through objects in instance of object 'class'JavaScript - 遍历对象“类”实例中的对象
【发布时间】:2016-03-24 12:24:13
【问题描述】:

我正在尝试使用纯 JavaScript 遍历对象实例中的所有对象。

我尝试过这样的事情:

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

var A = new a();
A.insertedValue = 20;
A.iterate();

执行此操作时,不会为 insertValue 记录例如“20”,而是简单地记录变量的名称,如“insertedValue”。

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

【问题讨论】:

    标签: javascript loops object


    【解决方案1】:

    有没有更好的方法来循环遍历所有对象 对象的实例或从我的对象中获取值的方法 循环槽?

    因为您只是在 this 中打印密钥,而不是使用 this[obj] 打印其值。

    做起来

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

    【讨论】:

      【解决方案2】:

      您这样做的方式在很大程度上是正确的,只是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]);
              });
          };
      }
      

      【讨论】:

      • 很酷,但是链接到这个类似圣经的答案就足够了 :) stackoverflow.com/questions/9329446/…
      • @gurvinder372:嗯,这是关于循环遍历数组和类似数组的东西,而不是对象。但是... :-)
      猜你喜欢
      • 1970-01-01
      • 2010-11-17
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 2014-11-04
      相关资源
      最近更新 更多