3

考虑这段代码

 _bindEvents: ->
  @input.bind 'keyup', =>
    @filter($(this).val())
    if $this .val() is ''
      @clearBtn.hide()
    else
      @clearBtn.show()

我很清楚“@”代表“_this”。所以它引用了父范围,但是如果我需要“内部 this”怎么办。

像这一行:

@filter($(this).val())

编译为:

_this.filter($(_this).val()); // $(_this)

我需要这个:

_this.filter($(this).val());  // $(this)

有没有办法做到这一点而不使用细箭头并使用 closue (that = this) 手动保存 this 引用?

4

2 回答 2

3

AFAIK 没有办法做到这一点;我会出于几个原因警告它:

  • 易于理解:当您使用哈希火箭 ( =>) 时,您实际上是在告诉读者您需要/想要保留this;的当前值 重新引入第二个this混淆了这一点。

  • 未来兼容性:据我了解,下一个 ECMAScript 规范=>将以一种甚至不引入新的this. (如果 CoffeeScript 在该功能落地时直接采用新的箭头语法,我不会感到惊讶)

带有显式引用的细箭头最终可能会使事情变得更加清晰。

于 2012-05-09T21:44:52.300 回答
0

您总是可以使用嵌入式 javascript 破解它:

`var second_this = this;`
@filter($(second_this).val())
于 2013-04-12T19:35:10.290 回答