Coffeescript类和范围以及肥胖和细箭头

Jo *_*o P 7 scope coffeescript arrow-functions

在coffeescript类的胖箭头函数中,如何访问类的范围以及函数?

例:

class Example
  foo: ->
    $('.element').each =>  # or ->
      @bar($(this))        # I want to access 'bar' as well as the jquery element
  bar: (element) ->
    element.hide()
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,如果我使用a =>那么@引用类的这个,但是'this'然后是错误的,而如果我对每个使用 - >,那么'this'是正确的作用域但是但那我该如何引用类功能栏呢?

谢谢!

Ale*_*yne 16

虽然mak是对的,但他没有指出在咖啡脚本中你很少需要jQuery的each方法,正如你所注意到的那样,在没有你的许可的情况下打击你的执行上下文.

class Example
  foo: ->
    for element in $('.element')
      @bar $(element)

  bar: (element) ->
    element.hide()
Run Code Online (Sandbox Code Playgroud)

Coffee脚本的循环功能支持each没有任何实际自定义库代码的概念.而且它们也不会产生新的范围或上下文,这意味着您不需要任何类型的胖箭.


mak*_*mak 10

这是因为在CoffeeScript中@是一个别名,this即当您将.coffee编译为.js时,@将替换为.js this.

如果Example::bar是丑陋的,我不认为有更"漂亮"的解决方案.

您可以this在调用之前存储引用.each:

class Example
  foo: ->
    self = @
    $('.element').each ->
      self.bar($(this)) # or self.bar($(@))
  bar: (element) ->
    element.hide()
Run Code Online (Sandbox Code Playgroud)