Coffeescript类和范围以及胖箭头和瘦箭头

Coffeescript类和范围以及胖箭头和瘦箭头,coffeescript,scope,arrow-functions,Coffeescript,Scope,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() 所以在这个例子中,如果我使用a=>

在coffeescript类的粗箭头函数中,如何访问该类的作用域和函数

例如:

class Example
  foo: ->
    $('.element').each =>  # or ->
      @bar($(this))        # I want to access 'bar' as well as the jquery element
  bar: (element) ->
    element.hide()
所以在这个例子中,如果我使用a=>则@引用类的this,但“this”则是错误的,而如果我对each使用->则“this”的范围正确,但如何引用类函数栏


谢谢

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

如果
Example::bar
很难看,我认为没有“更漂亮”的解决方案

在调用
之前,您可以存储对此
的引用。每个

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

虽然mak是对的,但他没有指出,在coffee脚本中,很少需要jQuery的
每个
方法,正如您所注意到的,这些方法会在未经您允许的情况下将您的执行上下文打在脸上

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

  bar: (element) ->
    element.hide()

Coffee脚本的循环特性支持
每个
的概念,而不需要任何实际的自定义库代码。而且它们也不会生成新的范围或上下文,这意味着您不需要任何类型的胖箭头。

检查不同的解决方案后。在这里,我看到了最完整的示例,并单击:

class MainApp
  self = []

  constructor: ->
    self = @

  toDoOnClick: (event) ->
    self.bar($(event.target)) #hide the clicked object

  bar: (element) ->
    element.hide()

  sampleMethod:->
    $(".myDiv").click (e) -> self.toDoOnClick(e)
    $('.element').each ->
      self.bar($(this))

我找到了一个临时解决方案:使用->然后使用Example::bar引用bar。它能用,但很难看。有谁有更好的解决方案吗?谢谢mak。回答得好。这表明我没有错过任何明显的东西,而且我喜欢self=@选项。我应该想到这一点。我还在习惯它,但我很喜欢它。另外,你觉得语法($'.foo')而不是$('.foo')怎么样?Topfunky试图推出第一款,但我还没有决定……好东西挤压!你完全正确。我已经把麦的答案留给了大家,但你的方式要整洁得多,而且还有很长的路要走。我在coffeescript中使用了一些旧js的转换,这就是我遇到这个问题的原因,但现在我知道的更多了。谢谢