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;
将其指向错误的对象。
最佳答案
根据 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);
}
关于Javascript 的 "this"指向给 array.map 的 lambda 中的错误对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9107131/