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

Mai*_*tor 4 javascript scope map 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; 
    });
}
Run Code Online (Sandbox Code Playgroud)

myClass.divideNumsByDivisor()被用来将它的成员变量上的每个数字乘以它的成员变量nums上的值divisor.

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

jfr*_*d00 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);
}
Run Code Online (Sandbox Code Playgroud)