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