2011-09-24 10 views
8

Quiero escribir una librería JS y manejarlo como esto:Escribir una biblioteca Javascript

var c1 = Module.Class(); 
c1.init(); 
var c1 = Module.Class(); 
c2.init(); 

Y, por supuesto, C1 y C2 no pueden compartir las mismas variables. Creo que sé cómo hacer esto con objetos, sería:

var Module = { 

    Class = { 

     init = function(){ 
      ... 
     } 

    } 

} 

Pero el problema es que no puedo tener varias instancias de la clase si escribo de esta manera. Así que estoy tratando de lograr lo mismo con la función, pero no creo que lo esté haciendo bien.

(function() { 

    var Module; 
    window.Module = Module = {}; 

    function Class(i) { 
     //How can "this" refer to Class instead of Module? 
     this.initial = i; 
    } 

    Class.prototype.execute = function() { 
     ... 
    } 

    //Public 
    Module.Class = Class; 

})(); 

No tengo ni idea si es posible, pero acepto sugerencias de otra manera para crear este módulo. No sé si también es relevante, pero estoy usando jQuery dentro de esta biblioteca.

Respuesta

14

Uso:

var c1 = Module.Class("c"); 
var c2 = Module.Class("a"); 
var n = c1.initial(); // equals 'c' 
c1.initial("s"); 
n = c1.initial(); // equals 's' 

módulo de código:

(function(window) { 
    var Module = window.Module = {}; 
    var Class = Module.Class = function(initial) 
    { 
     return new Module.Class.fn.init(initial); 
    }; 
    Class.fn = Class.prototype = { 
     init: function(initial) { 
      this._initial = initial; 
     }, 
     initial: function(v){ 
      if (v !== undefined) { 
       this._initial = v; 
       return this; 
      } 
      return this._initial; 
     } 
    }; 
    Class.fn.init.prototype = Class.fn; 
})(window || this); 

Se trata de utilizar el código JavaScript "Módulo" patrón de diseño; que es el mismo patrón de diseño utilizado por las bibliotecas de JavaScript como jQuery.

Aquí hay un buen tutorial sobre el patrón de "módulo": JavaScript Module Pattern: In-Depth

+1

perfecto! ¡Muchas gracias! –

+2

de nada. –

Cuestiones relacionadas