2016-05-30 39 views
1

我有一个对象称为foo调用对象的函数内for循环 - 的JavaScript

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

和一个名为toggleView方法,它遍历的foo集合,并呼吁每个实例conceal()方法:

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

,当然,foos[a].conceal();回报:隐藏不是一个函数

+0

有没有足够的代码在这里,看看有什么是错的。如果'foos'确实是一个数组,你应该使用一个带有数字索引的普通'for'循环,或者'.forEach()'来迭代。但是,你应该有什么工作,除非'foos'不是你说的那样。 – Pointy

+0

循环正在访问一个不包含'Foo'实例的属性。请注意,for..in'循环并不严格限于索引。相关:[为什么使用“for ... in”与数组迭代是一个坏主意?](https://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-a-坏主意) –

+0

你确定你使用'new'来创建Foo实例吗? – elmasse

回答

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"]);

0

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