2016-06-18 4 views
1

私は一連の関数を反復処理していますが、オブジェクトをコンテキストとして使用している各関数を呼び出すと仮定していますが、それを行う方法はわかりません - 適用しようとしましたが機能しません。これを完全に理解し、適用するなど。 いくつかの助けをお寄せください!funに渡されたオブジェクトを内部関数のコンテキストとして使用する方法は?

function calling(obj,arr){ 
for (var i=0; i<arr.length;i++){ 
    arr[i].apply(null,obj); 
    } 
return arr; 
} 

    var fnA = [ 
     function() { 
      this.yes = true; 
     }, 
     function() { 
      this.no = false; 
     } 
    ]; 
    var obj = {}; 

    calling(obj, fnA); 
    obj.yes; //should return true 

答えて

5

the documentation of Function.prototype.apply()を正しく読んでいますか?実行コンテキストを設定

thisArgは、applyの最初のパラメータではなく、秒:第二のパラメータとして

arr[i].apply(obj); 

、オプション機能を使って呼び出されるべきであることを引数の配列を渡すことができます。

0

これは、再帰アプローチを使用した例です。 関数の配列が不変でなければならない場合は、再帰の代わりにForループが必要です(または初期配列のコピーを作成する)。

var functions = [ 
    function() { this.yes = true; }, 
    function() { this.no = false; } 
]; 

var emptyObject = {}; 

function delegate(object, methods) { 
    if (methods.length) { 
     methods.splice(0, 1)[0].apply(object); 
     delegate(object, methods); 
    } 
} 

delegate(emptyObject, functions); 

console.log(emptyObject.yes); 
console.log(emptyObject.no); 
関連する問題