2015-10-14 67 views
3

此上下文是否适用于使用正确的“this”上下文调用回调函数?使用“this”调用回调函数的正确方法

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

或者它会更好地使用额外的箭头功能(是的,我用巴贝尔编译。

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

似乎都在Chrome,但避风港”相同的结果t检查了其他浏览器,是否有最佳做法或者是比另一种更好的支持方式?

回答

4

以下将立即调用doSomething,并将返回值指定为事件侦听器:

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

你可能想bind代替:

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

你的箭头功能将工作太。

0

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

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

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

要获得关于箭头的语法问题,而在功能上类似于呼叫:()=> { doSomething.call(this) },生成的代码具有封闭的附加层。

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

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

相关问题