coffeescript - 粗箭头 'this' 范围

标签 coffeescript scope this arrow-functions

考虑这段代码

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

我很清楚“@”代表“_this”。所以它引用父作用域,但是如果我需要“内部这个”怎么办。

像这一行:

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

编译成这样:

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

我需要这个:

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

有没有一种方法可以不使用细箭头并使用关闭 (that = this) 手动保存 this 引用来做到这一点?

最佳答案

据我所知,没有办法做到这一点;我会出于以下几个原因警告不要这样做:

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

  • future 兼容性:据我了解,下一个 ECMAScript 规范将支持 =>,甚至不会引入新的 这个。 (如果 CoffeeScript 直接采用新的 该功能登陆时的箭头语法)

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

关于coffeescript - 粗箭头 'this' 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10524403/

相关文章:

javascript - 防止方法在 Meteor 的服务器上自动运行

javascript - .bind 函数与 CoffeeScript

javascript - 如何设计具有多个回调的 Javascript 库 API?

javascript - 字符串引用的对象未显示

JavaScript:永不丢失绑定(bind)的方法

javascript - Node.js Express 应用程序处理启动错误

Javascript ,范围问题...不是很有经验的 javascript

javascript - 为什么我无法在这个简单的函数中访问这个变量?

javascript - 如何避免 "this"引用DOM元素,引用对象

java - 如何修复 "leaking this in constructor"警告