2011-01-05 11 views
2

Javascript erlaubt die Definition einer Funktion alsEinzel Instanz einer Klasse in Javascript

function Name() { content; } 

und

var Name = function() { content; } 

Gibt es ein Äquivalent für die Klassen? Ich möchte eine einzelne Instanz einer Klasse erstellen. Der einzige Weg, ich weiß, wie das zu tun ist

function ClassName() { content}; 
var instance = new ClassName(); 

Kann ich nicht die beiden in einer einzigen Anweisung kombinieren?

Danke!

Antwort

9

Sie haben keine Funktion überhaupt, um das Objekt zu erstellen, wenn Sie nur einen Singleton wollen:

var instance = { 
    name: "foo", 
    method: function() { 
     // do something 
    } 
}; 

, dass ein Objekt mit name und method Eigenschaften schafft. Sie müssen nicht wie die sie über die Initialisierung hinzufügen, wenn Sie wollen nicht, Sie können dies tun:

var instance = {}; 
instance.name = "foo"; 
instance.method = function() { 
    // do something 
}; 

ich in der Regel eine Funktion verwenden, wenn entweder ein Singleton oder eine „Klasse“ (wirklich definiert, eine Konstruktor-Funktion), aber das ist, weil ich eine Sache über namens Funktionen (die Funktion oben, dass ich auf die method Eigenschaft zuweisen ist anonym, die meine Werkzeuge bedeuten, können mir nicht helfen, viele   — mit Call-Stacks, usw. .). So würde ich wahrscheinlich tun:

var instance = (function() { 
    var publicSymbols = {}; 

    publicSymbols.name = "foo"; 

    publicSymbols.method = instance_method; 
    function instance_method() { 
     // do something 
    } 

    return publicSymbols; 
})(); 

... obwohl ich in der Regel einen kürzeren Namen für publicSymbols verwenden (wollte ziemlich klar sein, was es getan hat). Zum einen kann ich damit wirklich private Funktionen haben, die der Singleton oder die "Klasse" nutzen kann, die niemand sonst sehen kann. More here. Aber das ist eine Stilwahl; Es kann so einfach sein wie die ersten beiden Beispiele oben.

+0

Das funktioniert! Obwohl ich denke, werde ich bei der 'function' Methode bleiben, eine Klasse für die Syntax zu definieren. – Mikhail

+1

@Michail: Fair 'Nuff. Beachten Sie, dass JavaScript keine Klassen enthält, sondern nur Konstruktorfunktionen. Es ist ein Unterschied, der einen Unterschied macht, wenn Sie lernen, wie Sie mit dem Ableiten usw. umgehen. Wenn Sie die "Klassen" -Metapher mögen (ich auch), können Sie das nützlich finden: [Simple, Efficient Supercalls in JavaScript] (http : //blog.niftysnippets.org/2009/09/simple-efficient-supercalls-in.html). Es ist ein Mechanismus, der es einfach macht, "Klassen" und Unterklassen usw. zu erstellen, mit der Möglichkeit, Superklassenmethoden aufzurufen. –

+1

@TJ, wow. upvote für den Nifty Snippets Link. Es ist immer traurig und herzerwärmend, jemanden zu sehen, der eine syntaktisch angenehme Hülle für etwas entwickelt, das ich seit Jahren hacken muss – Mikhail

0

können Sie dies verwenden. Es ist eine selbstausführende Funktion, die stattdessen die Ergebnisse der Funktion zuweist.

var instance = (function className() { return something; })(); 
Verwandte Themen