为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_花开花谢_0 2019-06-24 17:00:33
使用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)”的方法?
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

这与追踪和关闭一些东西无关,这就是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.


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 530 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信