Javascript的“this”指向给予array.map的lambda中的错误对象

时间:2012-02-02 04:21:46

标签: javascript map scope this

function myClass() { 
    this.nums = [1,2,3]; 
    this.divisor = 2; 
}

myClass.prototype.divideNumsByDivisor = function(){
    return this.nums.map(function(num) {
        return num*this.divisor; 
    });
}

myClass.divideNumsByDivisor()用于将其成员变量nums上的每个数字乘以其成员变量divisor上的值。

这不起作用,因为函数function(num) { return num*this.divisor; }将此指向错误的对象。

2 个答案:

答案 0 :(得分:7)

根据MDN.map(fn, thisArg)的第二个参数是你想要在调用回调函数时将this ptr设置为它并将它设置为全局对象的内容(例如window)如果你没有传递第二个参数。

所以,你可以让你的例子像这样工作:

function myClass() { this.nums = [1,2,3]; this.divisor = 2; }
myClass.prototype.divideNumsByDivisor = function(){
    return this.nums.map(function(num) { return num*this.divisor; }, this);
}

答案 1 :(得分:2)

您需要在范围中定义对实例的引用,然后在另一个实例中获取它。将您的方法更新为此

myClass.prototype.divideNumsByDivisor = function(){
    var me = this;
    return this.nums.map(function(num) { return num*me.divisor; });
}