2016-10-10 7 views
0

私はES6クラスを学んでいます。コンストラクタだけでなく、他の場所でもヘルパ関数(データマングングなど)を利用できるようにする方法はありますか?つまり、IIFEをコンストラクタと静的クラスのメソッドとして2回タイプしないようにしますか?私がやっている現時点ではコンストラクタで静的ヘルパーメソッドを使用するにはどうすればいいですか?

例:getDimensionsはコンストラクタで呼び出すことはできませんので:

class Foo { 

    constructor(data){ 
     this._data = data; 
     let dimensions = function(data){ 
      //return some dimensions 
     }(data); 
     this._x = d3.scaleLinear().domain([dimensions])... 
    } 

    static getDimensions(someData){ 
     //same calcs as the constructor IIFE 
    } 

    updateScale(newData){ 
     let dimensions = getDimensions(newData); 
     this.x = d3.scaleLinear().domain([dimensions]); 
    } 
} 

は自分自身に私は私のプロトタイプの方法でとして使用することができます静的ヘルパーメソッドを取得するために賢明な/ことが可能ですコンストラクタ?

+0

あなたがいない 'updateScale'方法で' getDimensions'を呼んでいますコンストラクタでは、それは関数呼び出しではなく静的メソッド呼び出しですか? – Bergi

答えて

1

あなたは何を意味するのかよく分かりません。クラス名を参照するだけで、静的メソッドを呼び出すことができます。ここでは、別のコンストラクタ内の1つのクラスから静的メソッドを呼び出す示す完全な例である:

<html> 
    <head> 
     <script type="text/javascript" src="http://code.jquery.com/jquery-3.1.1.min.js"></script> 
     <script type="text/javascript"> 
     class Defines { 
      static StaticMethod(data) { 
       $("#someDiv").append("static method " + data); 
      } 
     } 

     class SomethingConcrete { 
      constructor (data) { 
       this.data = data; 
       Defines.StaticMethod(this.data); 
      } 
     } 

     $(function() { 
      const somethingConcrete = new SomethingConcrete(3); 
     }); 
     </script> 
    </head> 
    <body> 
     <div id="someDiv"> 
     </div> 
    </body> 
</html> 

出力:「静的メソッド3」

+2

静的メンバーのみを持つクラスは反パターンであることに注意してください。 – Bergi

+0

@Bergiは依存しています...例えば、 'Math'静的クラスはほとんどの言語では問題になりませんが、javascriptでは名前空間に関数を持つことができるので、クラスに入れる必要はありません。 –

+0

私は特に 'class'構文を意味しました。代わりにオブジェクトリテラルを使用するか、複数の名前付きエクスポートと名前空間インポートを使用する必要があります。 'Math'は呼び出し可能であったり、プロトタイプオブジェクトを持つべきではありません。 – Bergi

2

getDimensionsは静的メソッドなので、Fooオブジェクトのプロパティとしてアクセスする必要があります。 getDimensions(newData)の代わりにFoo.getDimensions(newData)を実行する必要があります。

関連する問題