我正在尝试从成员函数中的回调中访问类实例。这是一个例子:
Request
我当然可以使用for循环(MyClass.prototype.foo = function(){
var arr = [1, 2, 3];
arr.forEach(function(element){
//The next line doesn't work
//becuase this doesn't reference my MyClass-instance anymore
this.elements.push(element);
});
}
),但有些情况我不能。
我找到了一种访问for(var i = 0; i < arr.length; i++) {...}
实例的方法:
MyClass
这对我来说似乎不太干净。还有更好的方法吗?
答案 0 :(得分:0)
forEach
有一个可选的thisarg
,你可以在传递回调后传递,所以这应该有效:
MyClass.prototype.foo = function(){
var arr = [1, 2, 3];
var myCurrentInstance = this; //Store temporary reference
arr.forEach(function(element){
//Here it works because I use the temporary reference
this.elements.push(element);
}, this);
}
继承函数定义:
arr.forEach(callback[, thisArg])
见下文件:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
你可以随时使用bind
传递参数,虽然它没有;看起来更漂亮恕我直言:
MyClass.prototype.foo = function(){
var arr = [1, 2, 3];
var myCurrentInstance = this; //Store temporary reference
var myfunc = function(element){
//Here it works because I use the temporary reference
this.elements.push(element);
}.bind(this);
myfunc();
}
(我知道这是一个不好的例子,但它证明了绑定的作用)
答案 1 :(得分:0)
如果您的环境支持箭头功能(或者您将代码从ES6编译为ES5),则可以使用箭头功能:
arr.forEach(element => this.elements.push(elements));
内部箭头功能,this
在词汇环境中得到解决。
有关可能解决方案的完整列表,请参阅How to access the correct `this` context inside a callback?。
但是,如果这是所有代码,并且this.elements
是一个数组,您只需添加它们而无需显式迭代:
this.elements.push.apply(this.elements, arr);