从成员函数内部的回调中访问它

时间:2015-07-08 08:31:20

标签: javascript function this member

我正在尝试从成员函数中的回调中访问类实例。这是一个例子:

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

这对我来说似乎不太干净。还有更好的方法吗?

2 个答案:

答案 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);