使用 "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);
这样做会有小的性能损失,但应该可以忽略不计。
此上下文对于使用正确的 "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);
这样做会有小的性能损失,但应该可以忽略不计。