2016-05-30 5 views
0

forEachの実際の関数に対して、javascriptで無名関数の呼び出しを代入しようとしています。forEachで余分なパラメータを使用して関数を呼び出す

whatever: function(importantParam) { 
    array.forEach(this.whatever2,this); 
}, 
whatever2: function(p1, importantParam) { 
     if (p1 === importantParam) console.log("OK"); 
} 

だから、問題は、私は本当にimportantParamを渡す方法がわからないということです。何か

私は何を持っていることはされています。私は何を達成したいことのようなものが

whatever: function(importantParam) { 
    array.forEach(function (val) { 
     if (val === importantParam) console.log("OK"); 
    }); 
} 

ですforEach内のwhatever2を呼び出すと、インデックスと2つの引数を持つ引数として関数が使用され、それ以外は何もありません。

答えて

1

を適用するためにbindを使うとそれを包みますES6で.bind

var array = [1, 2, 3], 
    obj; 
obj = { 
    whatever: function (importantParam) { 
     array.forEach(this.whatever2.bind(this, importantParam)); 
    }, 
    whatever2: function (importantParam, p1) { 
     if (p1 === importantParam) 
      console.log("OK"); 
    } 
}; 

obj.whatever(2); // logs OK 

を使用すると、あなたはこれをクリーンアップし、矢印機能

let obj = { 
    whatever(importantParam) { 
     array.forEach(x => this.whatever2(x, importantParam)); 
    }, 
    whatever2(p1, importantParam) { 
     if (p1 === importantParam) 
      console.log("OK"); 
    } 
}; 

を使用することができますが、実際には代わりの.someを使用する必要がありますように、この例のユースケースあなたはルックスを提供してきましたので、ご注意ください.forEachreturn trueログを作成する

+0

ありがとうございました!完璧に働いた。私はちょうど私がその余分なパラメータを渡す必要があったの例を入れて、私は実際に値を比較していない、全体の配列のためにそれを必要とするが、その余分なチップのおかげで:) – Mayday

0

あなたは、例えば、何とかwhatever2をラップする必要があります別の関数

whatever: function(importantParam) { 
    array.forEach(function(item) { 
    this.whatever2(item, importantParam); 
    },this); 
}, 

または引数の順序を切り替えて、部分的にコールバック

whatever: function(importantParam) { 
    array.forEach(this.whatever2.bind(this, importantParam)); 
}, 
whatever2: function(importantParam, p1) { 
     if (p1 === importantParam) console.log("OK"); 
} 
関連する問題