嗨我有这个问题,当我在coffeescript中创建一个类时,我想在一个对象中定义一个函数,但我无法弄清楚范围,请参阅代码示例belove
collection_of_objects = [{id:234},{id:546},{id:234}]
class SampleObject
constructor: (collection_of_objects)->
@posts = []
@divide_number = 1337
for post in collection_of_objects
post.magicnr = ()->
return @id / @divide_number
id设置但我无法从magicnr函数内部获得divide_number 我意识到它的范围,但我似乎无法弄清楚如何做到这一点 我试图创建一个返回它的getDivideNumber函数,但我似乎无法访问magicnr函数内部
任何帮助将不胜感激
UPDATE 不得不接受以下黑客攻击
collection_of_objects = [{id:234},{id:546},{id:234}]
class SampleObject
@divide_number = 1337
divide_number = @divide_number
constructor: (collection_of_objects)->
@posts = []
for post in collection_of_objects
post.magicnr = ()->
return @id / divide_number
# for updating the @divide_number
setDivnr: (nr)->
@divide_number = nr
divide_number = @divide_number
答案 0 :(得分:1)
这是因为当您定义magicnr时,您可以更改范围。这个(@)成为帖子。
你可以通过缓存对@divide_number的引用来解决这个问题:
for post in collection_of_objects
divide_number = @divide_number
post.magicnr = ()->
return @id / divide_number
或使用胖箭头来定义post.magicnr:
for post in collection_of_objects
post.magicnr = ()=>
return post.id / @divide_number