我的用例是来自Google地图库的geocoder.geocode
api。我正在使用它将给定的用户地址转换为纬度/经度坐标,以便与其他谷歌地图API一起使用。
此api在完成搜索输入地址后执行回调。在回调中,我尝试使用this
关键字访问我的班级成员。
我理解this
,在闭包内引用的是与闭包所在的类不同的上下文 - 所以在方法的顶部我创建了变量并缓存了this
实例,通过var self = this
。
这是有效的,但它是公认的方法吗?如果重要,我正在使用ES6。
答案 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;
});
};