如何在一个对象中调用每个对象的方法
How to call method of each object within an object
我想在对象player
中迭代对象Items
。Items
是一组对象,其中每个对象都有一个方法add
。当我使用这个时,它抛出一个错误,说项目是未定义的。我如何在每个项目上调用add
?
for item of player.Items
player.Items.item.add()
注:我用的是coffeescript
player.Items[item].add();
也许这吗?我不知道cofeescript如何解析这个(或工作),所以这只是一个大胆的猜测。
您错误地使用了循环。我建议你看一下CoffeeScript的文档,以了解CS中的for循环是如何工作的。
取决于玩家是否。
数组:# 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
你的代码使用对象迭代器形式,但只指定一个变量,其中for循环预计分配两个信息,所以你的item
变量只是一个字符串或一个数字(取决于什么播放器。
player.Items
的item
的变量。在对象的情况下,您必须使用player.Items[key].add()
, item.add()
或在数组的情况下,只需item.add()
。
这不是任何语言中for循环的工作方式。循环变量是直接引用的,而不是附加到集合的末尾。你也不正确地使用of
;如果Items
是一个数组,则需要使用for/in
:
for item in player.Items
item.add()
你可以把它写成一个简单的数组推导式:
item.add() for item in player.Items
最后,在CoffeeScript和JavaScript中有一个很强的约定:你应该只使用大写字母来表示类,而不是变量。您的集合应该命名为player.items
。
相关文章:
- 从 javascript 中的对象方法返回一个对象
- 在Javascript中调用对象方法时不是函数类型错误
- Java Script将对象方法映射到数组中的对象
- 将数据从promise then方法传递到对象方法
- 设置显示后Flash对象方法不可用:无
- 通过引用Javascript中的另一个函数来传递对象方法
- Javascript库对象方法声明
- JavaScript对象范围-在对象方法中使用对象变量
- jQuery:如何使用文字对象方法中的方法来获取全局变量
- Javascript 对象方法不更新变量
- setInterval 只在对象方法上运行一次
- 对象方法中函数中的上下文
- 用JavaScript编写对象方法的最佳方式是什么
- 使用回调处理程序调用函数内部的父对象方法
- 从Javascript中的对象方法中访问全局变量
- 将此(对象)传递到一个对象方法嵌套方法中
- 为什么我得到“;不是函数错误”;对于我的对象方法
- 带有回调的Javascript对象方法中的递归
- 更正Node.js异步管道中的对象方法调用
- 如何在对象方法上调用requestAnimFrame