2012-02-02 4 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()をarray.mapするために与えられたラムダの内側に間違ったオブジェクトを指すが、メンバ変数divisorのIT上の値にのメンバ変数nums上の各番号を乗算しsuposedました。のJavascriptの「これは」

機能function(num) { return num*this.divisor; }が間違ったオブジェクトを指しているため、これは機能しません。

答えて

7

にあなたの方法を更新します(例:windowを)あなたが2番目の引数を渡さない場合。

だから、あなたはあなたの例は次のように動作させることができます。

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

2

スコープでインスタンスへの参照を定義し、後で別のインスタンス内で取得する必要があります。 MDNによると、.map(fn, thisArg)への第二引数はあなたがthis PTRは、コールバック関数が呼び出されたときに設定されるようにしたいものです、それはグローバルオブジェクトに設定されます。この

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