如何调用对象中每个对象的方法

时间:2014-03-08 21:58:18

标签: javascript object for-loop coffeescript iteration

我想迭代对象Items内的对象playerItems是一组对象,其中每个对象都有一个方法add。当我使用它时,它会抛出一个错误,说该项是未定义的。如何在每个项目上调用add

for item of player.Items
    player.Items.item.add()

P.S。我正在使用coffeescript

3 个答案:

答案 0 :(得分:3)

player.Items[item].add();

也许这个? 我不知道cofeescript如何解析这个(或根本不工作)所以这只是一个疯狂的猜测。

答案 1 :(得分:1)

您正在错误地使用循环。我建议你看一下CoffeeScript的documentation,了解循环如何在CS中运行。

取决于player.Items是数组还是对象......

对于数组:

# Loop through the individual elements in the Array, where
# each element is assigned to the item variable
item.add() for item in player.Items

对象:

# Loop through the Object's enumerable keys, assigning the key's name to key variable
# and the key's contents (another Object, I assume) to the item variable
item.add() for key,item of player.Items

您的代码使用的是Object迭代器表单,但只指定了一个变量,其中for循环应该分配两条信息,因此您的item变量只是一个字符串或数字(取决于哪个播放器。项目实际上是)。

其次,即使您正确定义了for循环,您的代码也会失败,因为您引用的是item player.Items的变量。如果是对象,则必须使用player.Items[key].add()item.add()或仅使用数组item.add()

答案 2 :(得分:0)

这不是循环如何在任何语言中工作。循环变量直接引用,而不是添加到集合的末尾。您还错误地使用of;如果Items是数组,则需要使用for/in

for item in player.Items
   item.add()

你可以把它写成一个简单的数组理解:

item.add() for item in player.Items

最后,CoffeeScript和JavaScript中有一个强烈的约定:你应该只使用大写字母来表示,而不是变量。您的收藏应该被称为player.items