2012-02-02 22 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; }); 
}