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

标签 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; 将其指向错误的对象。

最佳答案

根据 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/

相关文章:

javascript - 匹配最高选项卡的高度 - 设置幻灯片高度

javascript - 在 ActionPerformed 上添加 Div 响应

c++ - 编译时检查字符串到枚举映射是否完整

r - 理解 R 中的词法作用域

curly-braces - 您是否使用花括号进行额外的范围界定?

java - 将同名的单选按钮传递给 servlet

javascript - 将每个字符替换为 span

c++ - std::map 运算符 [] 和 size() 的排序

c++ - std::map 的大小大于调试器中显示的元素数量

c++ - 为什么范围解析在这里不起作用?