更好的处理方式'这'在Javascript的闭包中

Better way of handling 'this' in closures in Javascript?

本文关键字:Javascript 闭包 处理 更好 方式      更新时间:2023-09-26

我经常编写以下形式的Javascript代码:

MyClass.prototype.loadData = function() {
    var oReq = new XMLHttpRequest();
    var obj = this;
    oReq.onload = function() { obj.onDataLoaded(); }
    oReq.open("get", url, true);
    oReq.send();
}

似乎不合法的部分是var obj=this,它将当前对象分配给一个临时变量(obj),以便能够在oReq.onload函数中引用它。对于除this之外的所有其他变量,这是不必要的,因为它们自动成为闭包的一部分,因此可以在onload()中引用。但是this不是闭包的一部分,而是总是(?)指该方法绑定到的对象。

那么,从绑定到另一个对象的函数中访问当前this对象,有没有比先将this分配给临时变量然后使用该变量更惯用的方法呢?

这更简单:

this.onload = this.onDataLoaded.bind(this);

另一个方便的解决方案将提供ES6,箭头函数及其词法绑定:

this.onload = () => { this.onDataLoaded() }

(您已经可以在Firefox中使用它们)