使用 "this" 调用回调函数的正确方法

Correct method for calling a callback function with "this"

此上下文对于使用正确的 "this" 上下文调用回调函数有效吗?

data.on('load', doSomething.call(this));

或者使用额外的箭头函数会更好吗(是的,我正在使用babel编译。

data.on('load', () => {
  doSomething.call(this);
});

两者在 Chrome 中的结果似乎相同,但尚未检查其他浏览器。是否有最佳实践或一种方式比另一种方式得到更好的支持?

下面会立即调用doSomething,并将返回值赋值为事件监听器:

data.on('load', doSomething.call(this));

您可能需要 bind

data.on('load', doSomething.bind(this));

你的箭头函数也可以。

您需要创建一个函数,使用您期望的 this 值。

bind创建函数稍后调用,call只调用函数并给出结果。

data.on('load', doSomething.bind(this));

回答你关于箭头语法的问题,虽然它在功能上类似于调用:()=> { doSomething.call(this) },但生成的代码有一个额外的闭包层。

function() {
    doSomething.call(this);
}.bind(this);

这样做会有小的性能损失,但应该可以忽略不计。