2012-02-02 49 views
4
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()被suposed乘以每个数字在它的成员变量nums到它的成员变量divisor值。JavaScript的“本”指着里面给出拉姆达错对象array.map

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

回答

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); 
} 
+0

我没有意识到这一点。非常感谢你。 – MaiaVictor 2012-02-02 04:27:49

2

您需要在范围中定义对您实例的引用,然后在不同实例中稍后获取它。更新你的方法来此

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