如何在构造函数中使用静态辅助方法(不在其中声明)?

时间:2016-10-10 19:02:07

标签: javascript ecmascript-6 es6-class

我正在学习ES6课程。是否有一种方法可以使构造函数可以访问辅助函数(例如,用于数据调整),也可以在其他地方访问,这样我就不会输入两次函数(作为构造函数中的IIFE和静态类方法) ?

例如,目前我正在做,因为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]);
    }
}

让我自己成为可以在原型方法和构造函数中使用的静态辅助方法是否可行/合理?

2 个答案:

答案 0 :(得分:2)

getDimensions是一个静态方法,因此您必须将其作为Foo对象的属性进行访问。您应该getDimensions(newData)而不是Foo.getDimensions(newData)

答案 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”