In JavaScript gibt es keine vordefinierten Methoden zur Verwendung von Namespaces. In JavaScript müssen wir unsere eigenen Methoden erstellen, um NameSpaces zu definieren. Hier ist ein Verfahren, das wir in Oodles-Technologien befolgen.
Einen NameSpace registrieren Nachfolgend die Funktion zur Registrierung eines Namensraums
//Register NameSpaces Function
function registerNS(args){
var nameSpaceParts = args.split(".");
var root = window;
for(var i=0; i < nameSpaceParts.length; i++)
{
if(typeof root[nameSpaceParts[i]] == "undefined")
root[nameSpaceParts[i]] = new Object();
root = root[nameSpaceParts[i]];
}
}
Um einen Namespace zu registrieren, rufen Sie einfach die obige Funktion mit dem Argument als Namensraum getrennt durch '.'
(Punkt). Zum Beispiel Der Name Ihrer Anwendung sei oodles. Sie können einen Namespace mit der folgenden Methode erstellen
registerNS("oodles.HomeUtilities");
registerNS("oodles.GlobalUtilities");
var $OHU = oodles.HomeUtilities;
var $OGU = oodles.GlobalUtilities;
Grundsätzlich wird Ihre NameSpaces-Struktur wie unten im Backend erstellt:
var oodles = {
"HomeUtilities": {},
"GlobalUtilities": {}
};
In der obigen Funktion haben Sie einen Namespace namens "oodles.HomeUtilities"
y "oodles.GlobalUtilities"
. Um diese Namensräume aufzurufen, erstellen wir eine Variable, z.B. var $OHU
und var $OGU
.
Diese Variablen sind nichts anderes als ein Alias zur Intialisierung des Namespace. Wann immer Sie nun eine Funktion deklarieren, die zu HomeUtilities
werden Sie es wie folgt deklarieren:
$OHU.initialization = function(){
//Your Code Here
};
Der obige Funktionsname wird initialisiert und in einen Namespace eingefügt $OHU
. und diese Funktion überall in den Skriptdateien aufzurufen. Verwenden Sie einfach den folgenden Code.
$OHU.initialization();
Ähnlich verhält es sich mit dem anderen NameSpaces.
Ich hoffe, es hilft.
21 Stimmen
Ich kann sehen, wo Sie mit der Überprüfung gehen, um zu sehen, wenn der Namespace genommen wird, aber da das Objekt nicht erstellt werden, wenn dies fehlschlägt, denke ich, der bessere Ansatz ist zu warnen, wenn der Namespace genommen wird. Offen gesagt sollte dies einfach nicht in den meisten JS-Situationen passieren und sollte schnell in der Entwicklung gefangen werden.
19 Stimmen
Nehmen Sie einen "Namespace" der obersten Ebene (Fenstereigenschaft). Besitzen Sie ihn. Konflikte sollten bereits in der Testphase erkannt werden. Machen Sie sich nicht die Mühe, all diese "Was wäre wenn"-Prüfungen hinzuzufügen. Es ist ein fatales Problem für doppelte "Namensräume" und sollte als solches behandelt werden . Sie können einen Ansatz wie jQuery verfolgen, um das Bewohnen eines benutzerdefinierten "Namespace" zu ermöglichen; aber dies ist immer noch eine Frage der Entwurfszeit.
0 Stimmen
Siehe auch stackoverflow.com/questions/2102591/ bei Leistungsproblemen
0 Stimmen
Siehe auch stackoverflow.com/questions/4125479/ für Objekt- und Funktionsnamensräume
0 Stimmen
Dies ist eine Tonne von Informationen, aber wirklich legt die Unterschiede zwischen den verschiedenen JS Design Patterns. Es half mir eine Menge: addyosmani.com/resources/essentialjsdesignpatterns/book
1 Stimmen
Meh, heutzutage haben wir Symbole und Module, so dass doppelte Namespaces nicht einmal ein Problem sein sollten.