【问题标题】:Invoking a function of an object inside a for loop - JavaScript在 for 循环中调用对象的函数 - JavaScript
【发布时间】:2016-05-30 16:03:51
【问题描述】:

我有一个名为foo的对象:

function Foo(){
  this.conceal = function(){ ... };
};

还有一个名为toggleView的方法,它遍历foo的集合并在每个实例上调用conceal()方法:

function toggleView(foos){
  for(a in foos){
    foos[a].conceal();
  }
}

当然,foos[a].conceal(); 返回:conceal 不是函数

【问题讨论】:

  • 这里没有足够的代码来查看问题所在。如果foos 确实是一个数组,则应该使用带有数字索引的普通for 循环,或者使用.forEach() 进行迭代。但是,除非foos 不是你所说的那样,否则你所拥有的应该是有效的。
  • 循环正在访问一个不包含Foo 实例的属性。请注意,for..in 循环并不严格限于索引。相关:Why is using “for…in” with array iteration a bad idea?
  • 您确定使用new 创建Foo 实例吗?
  • 尝试调用一个函数,先在循环外,看看有没有问题。

标签: javascript object methods invoke


【解决方案1】:

function Foo(){
  this.conceal = function( item ) { 
    console.log(item); // "a" "b" "c"
  };
};

function toggleView(foos) {
  var myFoo = new Foo();      // Create new instance (here or outside this fn)
  for(a in foos){
    myFoo.conceal(foos[a]);   // use your instance and pass as items arg. reference
  }
}

toggleView(["a","b","c"]);

使toggleView 成为Foo原型 的示例

function Foo(){
  this.conceal = function( item ) { 
    console.log(item); // "a" "b" "c"
  };
}

Foo.prototype.toggleView = function(foos) {
  for(a in foos){
    this.conceal(foos[a]);        // invoke .conceal Method using `this` reference
  }
}

var myFoo = new Foo();            // Create new instance
myFoo.toggleView(["a","b","c"]);

【讨论】:

    【解决方案2】:

    你应该在某个时候调用函数 Foo 以便隐藏成为一个“函数”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 2017-12-16
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多