2016-10-10 3 views
0

저는 ES6 수업을 배우고 있습니다. 생성자뿐만 아니라 다른 곳에서도 도우미 함수 (예 : 데이터 munging)를 사용할 수 있도록하는 방법이 있나요? 그래서이 함수를 두 번 (IIFE가 생성자와 정적 클래스 메서드 인 것처럼) 입력하지 않도록 할 수 있습니까?생성자에서 정적 도우미 메서드를 사용하려면 어떻게해야합니까?

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]); 
    } 
} 

이는 재치/가능한 한 자신을 내 프로토 타입 방법과에서 사용할 수있는 정적 도우미 메서드를받을 수 있나요 : 나는 getDimensions 때문에하고있어 순간

예는 생성자에서 호출되지 않습니다 생성자?

+0

당신은'updateScale' 방법에'getDimensions'를 호출하지 않는 생성자에서 정적 메서드 호출이 아니라 함수 호출입니다. – Bergi

답변

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' 정적 클래스는 대부분의 언어에서 문제가되지 않지만 자바 스크립트에서는 네임 스페이스에서 함수를 가질 수 있기 때문에 반드시 클래스에 넣을 필요는 없습니다. –

+0

필자는 특별히'class' 구문을 의미했습니다. 대신 객체 리터럴을 사용하거나 여러 개의 이름이 지정된 내보내기 및 네임 스페이스 가져 오기를 사용해야합니다. '수학'은 호출 가능하거나 프로토 타입 객체를 가져서는 안됩니다. – Bergi

2

getDimensions은 정적 메서드이므로 Foo 개체의 속성으로 액세스해야합니다. getDimensions(newData) 대신 Foo.getDimensions(newData)을 사용해야합니다.

관련 문제