我想迭代对象Items
内的对象player
。 Items
是一组对象,其中每个对象都有一个方法add
。当我使用它时,它会抛出一个错误,说该项是未定义的。如何在每个项目上调用add
?
for item of player.Items
player.Items.item.add()
P.S。我正在使用coffeescript
答案 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
。