2016-08-16 18 views
0

私は、各メソッドが同じリストで動作するクラスを使用していますが、私は各メソッド本体のループ機能を抽象化する効果的な方法を探していますほぼすべてのブロックで私はそれが冗長なコードが得られているようfor ofループを使用せずにこれらのメソッドを呼び出すことができるようにしたいと思い、理想的にはfor-ofループからのクラスメソッド呼び出しの抽象

class example { 
    constructor(list) { 
    .... 
    } 
    .... 
    someFunc(param) { 
    for (let elem of this.list) { 
     elem.doSomething(); 
    } 
    } 
    someOtherFunc(param) { 
    for (let elem of this.list) { 
     elem.doSomethingElse(); 
    } 
    } 
} 

:たとえば

は、現在、私のような何かをしています。私はこれを他の方法で達成できると思っていましたか?

+0

リストを反復処理してコールバックを受け入れるメソッドを作成しますか?配列の場合は 'this.list.forEach'を直接使用してください。 –

+0

私はこれを避けたいと思っていましたし、別の方法で反復できる方法を探していました。私はちょうど新しい 'forEach'メソッドを作成すると思います。 – badfilms

+0

まあ、実際のループ文や関数をすべての要素に適用するAPIメソッドを使用する必要があります。本当に何もありません。あなたが探していたものをより具体的にすることができますか、おそらく別の言語(あなたが探しているものを見たかもしれません)で例を提供できますか? –

答えて

1

はい、あなたはArray.prototype.forEach()からインスピレーションを取り、あなたのオブジェクトのための.each()メソッドを実装することができますlist場合

class example() { 
    each(callback) { 
     for (let elem of this.list) { 
      callback(elem); 
     } 
    } 

    someFunc(param) { 
     this.each(x => x.doSomething()); 
    } 
} 

は配列を実装している、あなたがだけにしてさらに良いニュースがあります上記の単純なループをしたいです、それはすでにArray.prototype.forEach()によってあなたのために実装されています:もちろん

class example() { 
    someFunc(param) { 
     this.list.forEach(x => x.doSomething()); 
    } 
} 

カスタム.each()実装では、で他のことを行うことができますループで、より多くのコードを抽象化することができます。

+0

最初の例は十分にクリーンです。ありがとう! – badfilms

関連する問題