Javascript 如何在构造函数中使用静态帮助器方法(不在那里声明它们)?

Javascript 如何在构造函数中使用静态帮助器方法(不在那里声明它们)?,javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,我正在学习ES6课程。有没有一种方法可以让构造函数(如用于数据屏蔽)也可以访问其他地方的帮助函数,这样我就不会两次键入该函数(作为构造函数中的IIFE和静态类方法) 例如,我现在这样做是因为getDimensions在构造函数中不可调用: class Foo { constructor(data){ this._data = data; let dimensions = function(data){ //return some

我正在学习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]);
    }
}

有没有可能/明智地为我自己找到一个可以在原型方法和构造函数中使用的静态助手方法?

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

不知道你的意思。您应该能够通过引用类名来调用静态方法。下面是一个完整的示例,显示如何在另一个类的构造函数中从一个类调用静态方法:

<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>

类定义{
静态方法(数据){
$(“#someDiv”).append(“静态方法”+数据);
}
}
类某物混凝土{
建造师(数据){
这个数据=数据;
定义.StaticMethod(this.data);
}
}
$(函数(){
const something concrete=新的something concrete(3);
});

输出:“静态方法3”

不确定您的意思。您应该能够通过引用类名来调用静态方法。下面是一个完整的示例,显示如何在另一个类的构造函数中从一个类调用静态方法:

<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>

类定义{
静态方法(数据){
$(“#someDiv”).append(“静态方法”+数据);
}
}
类某物混凝土{
建造师(数据){
这个数据=数据;
定义.StaticMethod(this.data);
}
}
$(函数(){
const something concrete=新的something concrete(3);
});

输出:“static method 3”

您在
updateScale
方法中调用的
getDimensions
不在构造函数中,它是函数调用而不是静态方法调用?您在
updateScale
方法中调用的
getDimensions
不在构造函数中,这是一个函数调用而不是静态方法调用?请注意,只有静态成员的类是一个反模式。@Bergi依赖于。。。例如,
Math
静态类在大多数语言中都不是问题,尽管我猜在javascript中,您可以在名称空间中有函数,因此不必在类中有它们。我特别指的是
class
语法,是的。您应该改为使用对象文字,甚至只使用多个命名导出和名称空间导入<代码>数学不应被调用或具有原型对象。请注意,只有静态成员的类是反模式。@Bergi取决于。。。例如,
Math
静态类在大多数语言中都不是问题,尽管我猜在javascript中,您可以在名称空间中有函数,因此不必在类中有它们。我特别指的是
class
语法,是的。您应该改为使用对象文字,甚至只使用多个命名导出和名称空间导入<代码>数学不应可调用或具有原型对象。