Ich versuche geschachtelte Klassendefinitionen in Javascript zu erstellen, um nur ein globales Objekt zu haben.geschachtelte Klassendefinition, ohne zusätzliche globale Objekte zu erstellen
Im Moment definieren wir neue Klassen wie folgt aus:
FOO.Navigation.Sidebar.Tooltip = function()
{
};
So in jeder Funktionsdefinition müssen wir die ganze verschachtelte Klasse Namespace wiederholen:
FOO.Navigation.Sidebar.Tooltip.prototype.show = function()
{
/* do something here */
};
Wir einen Namespace-Funktion eingeführt zu erstellen die Klasse.
FOO = { /* ... */ }
FOO.namespace = function(namespaceString)
{
var namespaceParts = namespaceString.split('.');
var currentRoot = FOO;
var index = 0;
// Skip the first namespacePart, if it is already "FOO"
if ("FOO" == namespaceParts[0])
{
index = 1;
}
var currentPart;
for(index; index < namespaceParts.length; index++)
{
// This is the next element in the namespace hierarchy.
currentPart = namespaceParts[index];
// Add a new map for the currentPart to the root (if it does not exist yet).
currentRoot[currentPart] = currentRoot[currentPart] || {};
// The currentPart will be the new root in the next loop.
currentRoot = currentRoot[currentPart];
}
return currentRoot;
};
Jetzt wollen wir diese verwenden, um eine besser lesbare Version der bisherigen Definitionen zu erstellen, die wie folgt aussehen:
FOO.Navigation.Sidebar.Tooltip = function()
{
this.hallo = "world";
};
var tooltip = FOO.Navigation.Sidebar.Tooltip;
tooltip.prototype.show = function()
{
/* do something */
};
, dass eine neue globale Variable „Tooltip“ schaffen würde, und wir haben den Typ der Klassenname zweimal. So thougth wir anonyme Funktionen wie folgt zu verwenden:
(function(tooltip) {
tooltip = function()
{
this.hello = "world";
};
tooltip.prototype.show= function()
{
/* do something */
};
}) (FOO.namespace("FOO.Navigation.Sidebar.Tooltip"))
Das ist offensichtlich nicht funktionieren, weil wir eine neue Funktionsdefinition assing zu „Tooltip“.
Also meine Frage ist, ob es eine Möglichkeit gibt, den Klassennamen nur einmal zu schreiben, ohne weitere globale Variablen zu erstellen.
Ich erinnere Sie daran, dass Sie JavaScript, nicht Java schreiben. All dies 'foo.bar.baz.trev.cat.mouse' Namespace Malarkey gehört nicht in JavaScript. – Matt
Nun, wir versuchen, das Framework für unsere C++ - Entwickler zugänglicher zu machen. Deshalb versuchen wir zum Beispiel zusätzliche globale Variablen zu vermeiden. –