猿问

使用jQuery$(This)和ES6 Arrow函数(词法此绑定)

使用jQuery$(This)和ES6 Arrow函数(词法此绑定)

将ES6箭头函数与词法结合使用this装订很棒。

但是,我刚才遇到了一个问题,使用它使用一个典型的jQuery单击绑定:

class Game {
  foo() {
    self = this;
    this._pads.on('click', function() {
      if (self.go) { $(this).addClass('active'); }
    });
  }}

使用箭头函数代替:

class Game {
  foo() {
    this._pads.on('click', () => {
      if (this.go) { $(this).addClass('active'); }
    });
  }}

然后$(this)获取转换为ES5(Self=this)类型闭包。

对于词法绑定来说,是否有一种让跟踪忽略“$(This)”的方法?


qq_花开花谢_0
浏览 531回答 3
3回答

四季花海

这与追踪和关闭一些东西无关,这就是ES6的工作原理。这是您通过使用=>而不是function () { }.如果你想写ES6,你需要一直写ES6,你不能在某些代码行上切换它,你绝对不能抑制或改变它的方式=>起作用了。即使可以,您也只会得到一些奇怪的JavaScript版本,这些版本只有您了解,而且永远无法在您的自定义traceur之外正确工作,这肯定不是traceur的意义所在。解决这个特殊问题的方法是不使用this若要获得对单击元素的访问权限,请使用event.currentTarget:Class Game {   foo(){     this._pads.on('click', (event) => {       if(this.go) {         $(event.currentTarget).addClass('active');       }     });   }}jQuery提供event.currentTarget特别是因为即使在ES6之前,jQuery也不总是能够强制执行this在回调函数上(即,如果它被绑定到另一个上下文,则通过bind.
随时随地看视频慕课网APP
我要回答