Creación de clase/objeto Jquery y un pequeño problema. Curioso por qué "nuevo" no funciona

Tengo dos peticiones, si se me permite.

  1. Lo menos importante, pero me encantaría conocer su opinión sobre mi código a continuación. Cualquier forma de mejorarlo. ¿Hacerlo más portátil/robusto, etc.?

  2. Parece que cuando se crea un "Nuevo", el código no funciona completamente. Mi conjetura es que realmente no estoy creando un objeto válido. Qué estoy haciendo mal.

Esto no funcionó al intentar crear un nuevo objeto.

var ll_port2 = New ll_port;
    ll_port2.init({'aa':'#_div1','bb':'#_div2','cc':'1000'}); <-- no work

si nunca hago un artículo nuevo, funciona, ala:

ll_port.init({'aa':'#_div1','bb':'#_div2','cc':'1000'});  <-- works

Código a continuación:

           var ll_port = {
                   items:{
                       outside: /billabong|newage/,
                    },
                   assign: function(){
                       ccont = this.items.aa;
                       if (typeof $(ccont) === 'object' && $(ccont).css('z-index') && $(ccont).css('z-index') != this.items.cc) {
                              $(ccont).css('zIndex','').css('zIndex', this.items.zi);
                       }
                   },
                   closeit:function(){
                       if($(this.items.bb).length && $(this.items.bb).is(':visible')){
                           $(this.items.bb).hide();
                       }
                   },
                   strL: function(){
                       var _self = this;
                         $("body :not(" + _self.items.aa + ")")
                             .mousedown(function(event){
                                  event.stopPropagation();
                                  _self.closeit();
                                  _self.assign();
                              });
                        $('iframe').live('mouseover', 
                            function () {
                                if(_self.items.outside.test($(this).attr('src'))){
                                  _self.closeit();
                                }
                            });​
                  },
                  init: function(data){
                      $.extend(this.items, data);
                      this.strL();
                      var _self = this;
                      setTimeout(function(){
                          _self.assign();
                      }, 1500);
                  }
           }; 
            ll_port.init({'aa':'#_div1','bb':'#_div2','cc':'1000'});

preguntado el 12 de junio de 12 a las 19:06

ll_port no es una función constructora. no puedes usar new con eso. -

2 Respuestas

New (además del error tipográfico, que debería ser new) solo debe usarse en functionNo está en los objetos.

Y esas funciones debemos ser constructores.

El nuevo operador crea una instancia de un tipo de objeto definido por el usuario o de uno de los tipos de objeto integrados que tiene una función de constructor.

DND

Respondido el 12 de junio de 12 a las 19:06

Necesitas hacer ll_port una función, no un objeto.

var ll_port = function(){
    //... all your stuff
    this.items = {outside: /billabong|newage/};
}

Entonces puedes usar var ll_port2 = new ll_port()

Consulte aquí para obtener más información sobre Programación Orientada a Objetos con JS

Respondido el 12 de junio de 12 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.