在Javascript中从异步闭包内访问类成员

时间:2015-10-25 12:39:40

标签: javascript google-maps ecmascript-6

我的用例是来自Google地图库的geocoder.geocode api。我正在使用它将给定的用户地址转换为纬度/经度坐标,以便与其他谷歌地图API一起使用。

此api在完成搜索输入地址后执行回调。在回调中,我尝试使用this关键字访问我的班级成员。

我理解this,在闭包内引用的是与闭包所在的类不同的上下文 - 所以在方法的顶部我创建了变量并缓存了this实例,通过var self = this

这是有效的,但它是公认的方法吗?如果重要,我正在使用ES6。

1 个答案:

答案 0 :(得分:2)

var self = this;是ES5及之前的首选解决方案。我遵循的风格无论如何,第一行始终是var self = this;。它防止了愚蠢的错误。

在ES6中,我们有arrow functions。这些是词法绑定this值的匿名函数。这意味着它没有自己的常规Javascript函数所具有的this。使用ES6,您可以这样做:

var myFunction = function(){ 
    this.someValue = 1;
    someFunction((callbackResult) => { // ARROW FUNCTION
        this.someValue = 2;
    });
};

而不是:

var myFunction = function(){ 
    var self = this;

    self.someValue = 1;
    someFunction(function(callbackResult){
        self.someValue = 2;
    });
};