Frage

Ich baue eine Bibliothek (https://github.com/OscarGodson/storageLocker), ein Wrapper local genauer zu sein, sondern weil dies mein erster Versuch bei OO JavaScript Ich bin immer noch lernen, und ich habe eine Paar Fragen.

  1. Ich habe in anderen Bibliotheken gesehen, dass sie sie manchmal in einer anonymen Funktion wickeln. Muss ich, oder soll ich tun, dass mit diesem? Und wenn ja, wie, ohne etwas zu brechen?

  2. Für die interne API (im Grunde, die internen Funktionen), wie soll ich sie schreiben? Sollte sie das Hauptobjekt hinzufügen z.B. storageLocker.prototype.myInternalFunction() oder nur myInternalFunction() zufällig in meinem Skript? Ich wollte nicht die Funktionen global obwohl sein ... Eine der Funktionen zum Beispiel Schecks nur ein Bündel von Elementen in der JSON, sieht, wenn ihre Objekte, und dann prüft, welche der Objekttyp (wie Date()) und dann konvertiert es.

  3. Wie / wo soll ich globale hinzufügen, um meinen Skript, Vars? z.B. Ich habe eine var genannt patterns, die so etwas wie var patterns = {"date":/\/Date\(([0-9]+)\)\//} ist, wie soll ich das in meinem Skript hinzufügen?

Vielen Dank. Ich mag mein Skript der richtig schreiben, so im euch zu fragen. Ich weiß nicht von irgendwelchen JS Jungs vor Ort, die jeder OO JS tun, sie sind alle alten Schularten ...

War es hilfreich?

Lösung

  

http: / /nefariousdesigns.co.uk/archive/2010/10/object-oriented-javascript-follow-up-part-2-technical/

hat einen anständigen Abschnitt lesenswert Namensräume.

  

http://yuiblog.com/blog/2007/06/12 / Modul-Muster /

ist auch eine andere gute Übersicht.

Für weitere großes Material auf gute Javascript Praktiken Besuche

  

http://javascript.crockford.com/

Nach der Diskussion in den Kommentaren, ich habe das Beispiel dies geändert:

var storageLocker = function (selector) {

    var _selector = selector || "default value";

    function myPrivateFunction() {

    }

    var public = {

        get: function () {
            return _selector;
        },

        uppercase : function () {
            _selector = _selector.toUpperCase()
            return this;
        }

    }
    return public;

};

// use:
var test = storageLocker("search for this").uppercase().get();;

alert(test);

Dies ist zwar nicht gerade ein Beispiel für eine Bibliothek / Modul ist (weil Sie den Code zuzugreifst durch den Konstruktor direkt aufrufe), ist es ein Beispiel für das gleiche Objekt in Spielraum für eine weitere Verkettung von Methoden zu halten. Eigentlich Rückkehr Es ist nicht das storageLocker Objekt, es Rückgabe des ‚öffentlichen‘ Objekt, aber das Objekt hat Zugriff auf den Anwendungsbereich der storageLocker durch Schließung.

Es könnte auch andere bessere Möglichkeiten, dies zu tun, indem sie vielleicht das storageLocker Objekt zurückkehrt selbst, aber das wäre ein bisschen mehr verlangen zu durchdenken.

Andere Tipps

Ich würde sagen:

1) das Ziel dieser Technik ist es, den globalen Namensraum nicht verschmutzen. Das ist eine gute Sache.    siehe im Beispiel unten können Sie, dass alle Ihre Interaktion mit der Bibliothek ist über ein Objekt MyLibrary. Öffentliche API ist der Rückgabewert der anonymen Funktion.

var MyLibrary = function() {
// private
   this.InternalVariable = 'some value';

   function internalFunction(x,y) {
      return x + y;
      }

     function getInternalVariable() {
    return this.InternalVariable;
}
// public
   return {
      publicVariable : '1.0',
      publicFunction : function(x,y) {
         return x + y
         },
 accessInternalVariable : function() {

     return getInternalVariable();
     }
      }
   }();

2) siehe auch das obige Beispiel, wie Sie Ihre „interne“ Funktionen platzieren

3), wenn Sie globale Variable ist eine Art von Konfigurationsoption, würde ich mache nur öffentlichen Setter / Getter und hielt die Variable „private“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top