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.
Das funktioniert! Obwohl ich denke, werde ich bei der 'function' Methode bleiben, eine Klasse für die Syntax zu definieren. – Mikhail
@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. –
@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