2016-10-11 7 views
0

私は毎秒実行される 'updater'というタイマーを持っています。また、そのメソッドにいくつかの関数を含む 'particleFunctions'オブジェクトがあります。私は 'particleFunctions'内のすべての 'update'関数を2度も実行したい。どのようにforループを使用してオブジェクト内のすべてのメソッド内のすべての関数を呼び出すのですか?

理想的には私が出力出力にはconsole.logにこのメッセージ毎秒たい:

0 
1 
2 

var updater = setInterval(createParticles, 1000); 
 

 
var particleFunctions = { 
 
    particle0 : function(i){ 
 
     this.update = function(i){ 
 
      console.log(i); 
 
     } 
 
    }, 
 
    particle1 : function(i){ 
 
     this.update = function(i){ 
 
      console.log(i); 
 
     } 
 
    }, 
 
    particle2 : function(i){ 
 
     this.update = function(i){ 
 
      console.log(i); 
 
     } 
 
    } 
 
} 
 

 
function createParticles(){ 
 
    for (var i = 0; i < Object.keys(particleFunctions).length; i++){ 
 
     particleFunctions['particle' + i].update(i); 
 
    } 
 
}

+0

ため- 1を追加しました。 – Fabricio

+0

あなたの 'particleX'関数はすべて同じことをします:' this.update'を 'console.log(i)'を実行する関数に設定しますが、コードは 'particleX()'関数を呼び出すことはありません。 – nnnnnn

答えて

1

ないあなたはiが呼ばれるようにしたい場所を確認しますが、このような何かをトリックを行うだろう:

var particleFunctions = { 
 
     particle0 : function(i){ 
 
      this.update = function(){ 
 
       console.log(i); 
 
      } 
 
      return this; 
 
     }, 
 
     particle1 : function(i){ 
 
      this.update = function(){ 
 
       console.log(i); 
 
      } 
 
      return this; 
 
     }, 
 
     particle2 : function(i){ 
 
      this.update = function(){ 
 
       console.log(i); 
 
      } 
 
      return this; 
 
     } 
 
    } 
 
    
 
    function createParticles(){ 
 
     for (var i = 0; i < Object.keys(particleFunctions).length - 1; i++){ 
 
      particleFunctions['particle' + i](i).update(); 
 
     } 
 
    } 
 
    
 
    var updater = setInterval(createParticles, 1000);

主な問題は、particleFunctions['particle' + i]は関数を返すということですので、あなたは順番にupdateを呼び出すことができるようにそれを呼び出す必要があります。

また、あなたのObject.keys(particleFunctions).lengthが範囲外のインデックスを与えていたので、私が代わりにparticle1のあなたのJSONに「particle1」(使用して引用符)を変更してみてくださいチェック

関連する問題