从构造函数内部获取实例变量

时间:2014-01-13 08:28:33

标签: ruby-on-rails coffeescript

嗨我有这个问题,当我在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

1 个答案:

答案 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