2016-12-06 309 views
9

我想使用Javascript/Node JS創建一個靜態類。我用谷歌,但我找不到任何有用的例子。如何在javascript/nodejs中創建靜態函數/對象(ES6)

我想在Javascript ES6像這樣(C#)來創建:

public static MyStaticClass { 
    public static void someMethod() { 
     //do stuff here 
    } 
} 

現在,我有這個類,但我認爲這個代碼將創建一個新的實例每次它被調用時從「要求」。

function MyStaticClass() { 
    let someMethod =() => { 
     //do some stuff 
    } 
} 
var myInstance = new MyStaticClass(); 
module.exports = factory; 
+0

那麼你不需要的類。你需要一個對象。 – estus

回答

16

注意的方法JS是prototype-based programming,而不是class-based

不是創建類多次訪問它的方法,你可以在一個對象創建一個方法,像

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

MyStaticClass.someMethod(); // Doing someMethod 

由於JS,一切都是對象(除primitive types + undefined + null) 。就像上面創建someMethod函數一樣,您實際上創建了一個新的函數對象,可以通過MyStaticClass對象中的someMethod訪問該對象。 (這就是爲什麼你可以訪問someMethod對象的屬性,如MyStaticClass.someMethod.prototypeMyStaticClass.someMethod.name

不過,如果你覺得它更方便地使用類。 ES6現在可以與static methods一起使用。

例如,

MyStaticClass.js

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

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

module.exports = MyStaticClass; 

Main.js

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

MyStaticClass.someMethod(); // Doing someMethod 
MyStaticClass.anotherMethod(); // Doing anotherMethod 
+2

需要注意的是,即使在ES6類中,基於原型的繼承仍然完全有效 - 新的「類」是語法糖,它使基於原型的繼承更多地使用經典繼承的熟悉語法。 JavaScript對象不是通過類來模式化的,它們通過說「我喜歡那邊的對象,除了這些差異」。 – PMV

3

我會使用對象文本:

const myObject = { 
    someMethod() { 
    // do stuff here 
    } 
} 

module.exports = myObject; 
+0

不應該是'someMethod:function(){}'?編輯:我明白了,謝謝 –

+0

這是ECMAScript6的方法定義。查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions – mattias

+0

@ChrisG ES6提供了一個新的語法 – naomik

3

可以使用static關鍵字來定義一個類

class MyStatisticsClass { 
 
    static someMethod() { 
 
    return "MyStatisticsClass static method" 
 
    } 
 
} 
 

 
console.log(MyStatisticsClass.someMethod());

相關問題