范围'this'胖箭头



请考虑此代码

 _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())

最新更新