Pregunta

Estoy construyendo una biblioteca (https://github.com/OscarGodson/storageLocker), un envoltorio de almacenamiento local para ser más exactos, sino porque este es mi primer intento de JavaScript OO Todavía estoy aprendiendo y tengo una par de preguntas.

  1. he visto en otras bibliotecas que a veces los envuelven en una función anónima. Hacer yo, o debería, hacer eso con esto? Y si es así, ¿sin romper nada?

  2. Para la API interna (básicamente, las funciones internas) ¿Cómo debo escribir? En caso de añadirlos al objeto principal, por ejemplo, storageLocker.prototype.myInternalFunction() o simplemente myInternalFunction() al azar en mi guión? No quería que las funciones que deben embargo mundial ... Una de las funciones, por ejemplo, sólo comprueba un manojo de elementos en el JSON, ve si sus objetos, y luego lo comprueba el tipo de objeto es (como Date()) y luego convertidos a él.

  3. ¿Cómo / dónde debo añadir mundial, a mi guión, vars? p.ej. tengo una var llamada patterns que es algo así como var patterns = {"date":/\/Date\(([0-9]+)\)\//} cómo debo añadir que en mi guión?

Muchas gracias. Quiero escribir mi guión del manera correcta así que estoy pidiendo que chicos. No sé de ningún chicos JS localmente que no hacen ningún JS OO, que son todos los tipos de la vieja escuela ...

¿Fue útil?

Solución

  

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

tiene una sección decente en namespacing vale la pena leer.

  

http://yuiblog.com/blog/2007/06/12 / módulo de patrón /

es también otra buena visión general.

Para saber si hay material sobre buenas prácticas de javascript, echa un vistazo a

  

http://javascript.crockford.com/

Después de nuestra discusión en los comentarios, he cambiado el ejemplo de esto:

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);

Si bien esto no es exactamente un ejemplo de una biblioteca / módulo (debido a que está accediendo el código llamando al constructor directamente), es un ejemplo de mantener el mismo objeto en su alcance para su posterior encadenamiento de métodos. En realidad no es el objeto de regresar storageLocker, es la devolución del bien 'público', pero ese objeto tiene acceso al alcance de la storageLocker hasta el cierre.

No podría haber otras formas mejores de hacer esto tal vez por la devolución del propio objeto storageLocker, pero eso requeriría un poco más pensamiento a través de.

Otros consejos

Yo diría:

1) el propósito de esta técnica es que no contamina el espacio de nombres global. Esa es una buena cosa.    En el siguiente ejemplo se puede ver que toda su interacción con la biblioteca es a través de uno MyLibrary objeto. API pública es el valor de retorno de la función anónima.

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) Véase también el ejemplo anterior sobre cómo realizar tu funciones "internas"

3) si la variable global es una especie de una opción de configuración, que acababa de hacer setter / getter pública y se mantiene la variable "privado"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top