考虑这段代码
_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)
有没有办法在不使用细箭头的情况下使用闭包手动保存此引用(这=)?
答案 0 :(得分:3)
AFAIK没有办法做到这一点;我会因为几个原因警告它:
易于理解:当您使用哈希火箭(=>
)时,您有效地告诉读者您需要/想要保留当前值this
;重新引入第二个this
混淆。
未来兼容性:根据我的理解,下一个ECMAScript规范是支持=>
,因为它甚至不会引入新的this
。 (如果CoffeeScript直接采用新版本,我也不会感到惊讶
该特征登陆时的箭头语法
带有显式引用的细箭头最终可能会使事情变得更加清晰。
答案 1 :(得分:0)
你总是可以使用嵌入式javascript来破解它:
`var second_this = this;`
@filter($(second_this).val())