如何在javascript/nodejs中创建静态函数/对象(ES6)

Vla*_*gas 21 javascript node.js javascript-objects ecmascript-6

我想使用Javascript/Node JS创建一个静态类.我使用谷歌,但我找不到任何有用的例子.

我想在Javascript ES6中创建这样的东西(C#):

public static MyStaticClass {
   public static void someMethod() {
      //do stuff here
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,我有这个类,但我认为这个代码每次从"require"调用时都会创建一个新实例.

function MyStaticClass() {
   let someMethod = () => {
      //do some stuff
   }
}
var myInstance = new MyStaticClass();
module.exports = factory;
Run Code Online (Sandbox Code Playgroud)

vad*_*lim 40

请注意,JS是基于原型的编程,而不是基于类的编程.

您可以在对象中创建一个方法,而不是多次创建类来访问其方法

var MyStaticClass = {
    someMethod: function () {
        console.log('Doing someMethod');
    }
}

MyStaticClass.someMethod(); // Doing someMethod
Run Code Online (Sandbox Code Playgroud)

因为在JS中,一切都是对象(原始类型 + undefined+ 除外null).就像someMethod上面创建函数一样,您实际上创建了一个可以使用someMethod内部MyStaticClass对象访问的新函数对象.(这就是为什么你可以访问someMethodMyStaticClass.someMethod.prototype或的对象的属性MyStaticClass.someMethod.name)

但是,如果您发现使用类更方便.ES6现在可以使用静态方法.

例如

MyStaticClass.js

class MyStaticClass {
    static someMethod () {
        console.log('Doing someMethod');
    }

    static anotherMethod () {
        console.log('Doing anotherMethod');
    }
}

module.exports = MyStaticClass;
Run Code Online (Sandbox Code Playgroud)

Main.js

var MyStaticClass = require("./MyStaticClass");

MyStaticClass.someMethod(); // Doing someMethod
MyStaticClass.anotherMethod(); // Doing anotherMethod
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,即使在ES6类中,基于原型的继承仍然完全有效 - 新的"类"是语法糖,使基于原型的继承使用更多熟悉的经典继承语法.JavaScript对象不是从类中构图出来的,它们通过说"除了这些差异之外我就像那个对象"来形成图案. (2认同)