Ich benutze der Ansatz, der auf der Enterprise jQuery-Website zu finden ist :
Das folgende Beispiel zeigt, wie man private und öffentliche Eigenschaften und Funktionen deklariert. Alles wird als selbstausführende anonyme Funktion ausgeführt.
(function( skillet, $, undefined ) {
//Private Property
var isHot = true;
//Public Property
skillet.ingredient = "Bacon Strips";
//Public Method
skillet.fry = function() {
var oliveOil;
addItem( "\t\n Butter \n\t" );
addItem( oliveOil );
console.log( "Frying " + skillet.ingredient );
};
//Private Method
function addItem( item ) {
if ( item !== undefined ) {
console.log( "Adding " + $.trim(item) );
}
}
}( window.skillet = window.skillet || {}, jQuery ));
Wenn Sie also auf eines der öffentlichen Mitglieder zugreifen möchten, gehen Sie einfach auf skillet.fry()
o skillet.ingredients
.
Das Tolle daran ist, dass Sie den Namensraum jetzt mit genau derselben Syntax erweitern können.
//Adding new Functionality to the skillet
(function( skillet, $, undefined ) {
//Private Property
var amountOfGrease = "1 Cup";
//Public Method
skillet.toString = function() {
console.log( skillet.quantity + " " +
skillet.ingredient + " & " +
amountOfGrease + " of Grease" );
console.log( isHot ? "Hot" : "Cold" );
};
}( window.skillet = window.skillet || {}, jQuery ));
Der dritte undefined
Argument
Der dritte, undefined
ist die Quelle der Variablen mit dem Wert undefined
. Ich bin mir nicht sicher, ob es heute noch relevant ist, aber bei der Arbeit mit älteren Browsern / JavaScript-Standards (ecmascript 5, javascript < 1.8.5 ~ firefox 4), die global-scope Variable undefined
ist beschreibbar, so dass jeder seinen Wert umschreiben kann. Das dritte Argument (wenn kein Wert übergeben wird) erzeugt eine Variable namens undefined
die auf den Namensraum/die Funktion skaliert ist. Da bei der Erstellung des Namensraums kein Wert übergeben wurde, wird standardmäßig der Wert undefined
.
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.