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; }
将此指向错误的对象。
答案 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; });
}