2011-06-08 21 views
8

Esta es una pregunta simple que sé, he buscado en google pero no encuentro mucha ayuda. Intento crear un objeto, con mis propios parámetros personalizados, y luego llamar a uno de ellos en una alerta.Jquery create object

Todo lo que intento, parece que no funciona, sé que esto es bastante simple y lo disculpo. Todos mis otros JS en mi tiempo han sido bastante simples y todos en línea debido a eso, ahora me estoy moviendo a más OOP JS.

$.fn.DataBar = function() { 

     $.DataBar.defaultOptions = { 
      class: 'DataBar', 
      text: 'Enter Text Here' 
     } 

     this.greet = function() { 
      alert(this.text); 
     }; 
} 

var q = new $.DataBar(); 
q.greet(); 
+0

¿Qué pasa cuando intente '$ .DataBar.greet = function() {' en lugar de 'this.greet = function() {'? – StuperUser

Respuesta

10
  1. Usted no necesita la parte fn, basta con utilizar:

    $.DataBar = function() { ... }; 
    

    $.fn es simplemente una referencia a interna prototipo de jQuery. Por lo tanto, $.fn.DataBar está destinado a ser utilizado como $(selector).DataBar(), no $.DataBar().

  2. Sus opciones predeterminadas no se están aplicando al objeto recién creado. Opcionalmente, también se puede definir la función greet en DataBar 's prototipo:

    $.DataBar = function() { 
        $.extend(this, $.DataBar.defaultOptions); 
    }; 
    
    $.DataBar.prototype.greet = function() { 
        alert(this.text); 
    }; 
    
    $.DataBar.defaultOptions = { 
        class: 'DataBar', 
        text: 'Enter Text Here' 
    }; 
    
+0

Describió, por qué no es necesario bin DataBar a "fn", pero ¿por qué vincularlo a "$" en absoluto? –

+0

@Tim, no es necesario;) Supuse que quería que estuviera relacionado con jQuery de alguna manera, por razones de espacio de nombres o asociación, así que lo guardé allí. –

2

Hay 3 problemas en su código

  1. un desaparecidas ; después las opciones predeterminadas (que no causen el error)
  2. añadir las opciones por defecto a la instancia con this.defaultOptions
  3. llamada alert(this.defaultOptions.text)
  4. instantiate con $.fn.DataBar() como que ha añadido a su clase a $.fn

Aquí su trabajo código:

$.fn.DataBar = function() { 

     this.defaultOptions = { 
      class: 'DataBar', 
      text: 'Enter Text Here' 
     }; 

     this.greet = function() { 
      alert(this.defaultOptions.text); 
     }; 
}; 

var q = new $.fn.DataBar(); 
q.greet(); 
+0

¿No desea iniciar una guerra de comentarios sagrados, pero no son puntos y coma opcionales en JavaScript? Me gusta publicar este blog sobre este tema específico: http://mislav.uniqpath.com/2010/05/semicolons/ –

+1

Tienes razón en este tema. Pero obtendrá errores con, por ejemplo, la validación de JSLint como se dijo en el artículo ;-). pero está bien, lo eliminaré. – DanielB

+0

Bueno, debería haber una opción para eso :-) –