首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将此$( jQuery )与ES6箭头函数一起使用(词法此绑定)

将此$( jQuery )与ES6箭头函数一起使用(词法此绑定)
EN

Stack Overflow用户
提问于 2014-12-28 02:47:19
回答 5查看 68K关注 0票数 147

使用带有词法this绑定的ES6箭头函数是很棒的。

然而,我在使用它和典型的jQuery点击绑定时遇到了一个问题:

代码语言:javascript
运行
复制
class Game {
  foo() {
    self = this;
    this._pads.on('click', function() {
      if (self.go) { $(this).addClass('active'); }
    });
  }
}

改用箭头函数:

代码语言:javascript
运行
复制
class Game {
  foo() {
    this._pads.on('click', () => {
      if (this.go) { $(this).addClass('active'); }
    });
  }
}

然后$(this)被转换为ES5 (self = this)类型的闭包。

有没有办法让Traceur忽略词法绑定的"$(this)“?

EN

回答 5

Stack Overflow用户

发布于 2014-12-28 02:52:24

这与Traceur和关闭某些东西无关,这就是ES6的工作原理。这是您通过使用=>而不是function () { }所要求的特定功能。

如果你想要写ES6,你需要一直写ES6,你不能在某些代码行上来回切换,你也绝对不能抑制或改变=>的工作方式。即使可以,你也只能得到一些只有你自己才能理解的奇怪的JavaScript版本,如果没有你的定制跟踪,它永远不会正常工作,这绝对不是跟踪的意义所在。

解决这个特殊问题的方法不是使用this来访问被单击的元素,而是使用event.currentTarget

代码语言:javascript
运行
复制
Class Game {
  foo(){
    this._pads.on('click', (event) => {
      if(this.go) {
        $(event.currentTarget).addClass('active');
      }
    });
  }
}

jQuery特别提供了event.currentTarget,因为即使在ES6之前,jQuery并不总是可以在回调函数上施加this (即,如果它通过bind绑定到另一个上下文。

票数 221
EN

Stack Overflow用户

发布于 2015-12-10 18:27:41

事件绑定

代码语言:javascript
运行
复制
$button.on('click', (e) => {
    var $this = $(e.currentTarget);
    // ... deal with $this
});

循环

代码语言:javascript
运行
复制
Array.prototype.forEach.call($items, (el, index, obj) => {
    var $this = $(el);
    // ... deal with $this
});
票数 63
EN

Stack Overflow用户

发布于 2017-03-27 21:54:55

另一个案例

meagar的答案是正确的,我对它投了赞成票。

然而,还有另一种情况:

代码语言:javascript
运行
复制
$('jquery-selector').each(() => {
    $(this).click();
})

可以修复为:

代码语言:javascript
运行
复制
$('jquery-selector').each((index, element) => {
    $(element).click();
})

这是jQuery中的一个历史错误,它将索引,而不是元素作为第一个参数:

.each(函数)

函数

类型:Function( Integer index, Element element )

对每个匹配的元素执行的函数。

请参阅:https://api.jquery.com/each/#each-function

票数 57
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27670401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档