使用“this”调用回调函数的正确方法
问题描述:
此上下文是否适用于使用正确的“this”上下文调用回调函数?使用“this”调用回调函数的正确方法
data.on('load', doSomething.call(this));
或者它会更好地使用额外的箭头功能(是的,我用巴贝尔编译。
data.on('load',() => {
doSomething.call(this);
});
似乎都在Chrome,但避风港”相同的结果t检查了其他浏览器,是否有最佳做法或者是比另一种更好的支持方式?
答
以下将立即调用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);
这样做会有小的性能损失,尽管它应该可以忽略不计。