考虑这段代码
_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/