2016-12-06 3 views
9

Ich möchte eine statische Klasse mit Javascript/Node JS erstellen. Ich habe Google benutzt, aber ich kann kein brauchbares Beispiel finden.Wie statische Funktionen/Objekte in Javascript erstellen/nodejs (ES6)

Ich möchte Javascript ES6 so etwas wie dieses (C#) erstellen:

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

Vorerst ich diese Klasse haben, aber ich denke, dass dieser Code wird jedes Mal eine neue Instanz erstellt, die sie aufgerufen werden von "verlangen".

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

Dann brauchen Sie keine Klasse. Du brauchst ein Objekt. – estus

Antwort

16

Beachten Sie, dass JS definieren ist prototype-based programming, anstelle von class-based.

Statt die Klasse mehrere Male von der Erstellung seiner Methode zuzugreifen, können Sie einfach eine Methode in einem Objekt erstellen, wie

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

MyStaticClass.someMethod(); // Doing someMethod 

Da in JS, alles ist ein Objekt (außer primitive types + undefined + null) . Wie beim Erstellen der obigen Funktion someMethod haben Sie tatsächlich ein neues Funktionsobjekt erstellt, auf das mit someMethod innerhalb des Objekts MyStaticClass zugegriffen werden kann. (Deshalb sollten Sie die Eigenschaften von someMethod Objekt wie MyStaticClass.someMethod.prototype oder MyStaticClass.someMethod.name zugreifen können)

jedoch, wenn Sie es bequemer zu bedienen Klasse finden. ES6 funktioniert jetzt mit static methods.

z.

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

Es ist wichtig zu beachten, dass auch in ES6-Klassen Prototyp-basierte Vererbung ist noch in voller Wirkung - die neuen "Klassen" sind syntaktischer Zucker, die prototypbasierte Vererbung mehr von der vertrauten Syntax der klassischen Vererbung Gebrauch machen. JavaScript-Objekte werden nicht aus Klassen gemustert, sie werden gemustert, indem man sagt "Ich bin wie das Objekt dort drüben, abgesehen von diesen Unterschieden". – PMV

3

Ich würde ein Objektliteral verwenden:

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

module.exports = myObject; 
+0

Sollte dies nicht 'someMethod: function() {}' sein? Edit: Ich sehe, danke –

+0

das ist Methodendefinition mit ECMAScript6. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions – mattias

+0

@ChrisG ES6 bietet eine neue Syntax – naomik

3

können Sie die static Schlüsselwort verwenden, um ein Verfahren für eine Klasse

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

 
console.log(MyStatisticsClass.someMethod());