jQuery como arquitectura

Estoy tratando de crear una arquitectura similar a jQuery en mi aplicación, pero no pude obtener los resultados esperados.

En jQuery "El objeto jQuery es en realidad solo el constructor de inicio 'mejorado'".

jQuery = function( selector, context ) {
    return new jQuery.fn.init( selector, context, rootjQuery );
},

Eso significa que cuando inicia el objeto jQuery con;

$('selector')

jQuery devuelve el

new jQuery.fn.init( selector, context, rootjQuery );

El prototipo de jQuery se define como;

jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
    var match, elem, ret, doc;
            ...
            return jQuery.makeArray( selector, this ); // An array
    }
...
size: function() {
    return this.length;
},
...

todas las propiedades y métodos útiles de jQuery (como hide(), show() exct.) están en manos del prototipo del objeto jQuery.

Y el prototipo del método init se asigna como prototipo de jQuery;

jQuery.fn.init.prototype = jQuery.fn; 

¡Bien!. Mi problema es que traté de usar esta arquitectura pero no pude obtener las propiedades y métodos del valor devuelto.

Aquí está mi código;

(function() {

Metinler = function(MetinKodu){
    return new Metinler.sub.baslat( MetinKodu );
}



Metinler.sub = Metinler.prototype = {
    metinKodlari: [],
    constructor: Metinler,
    topla: function(){
        return this.metinKodlari[0] + this.metinKodlari[1];
    },
    baslat: function(MetinKodu) {
        if($.isArray(MetinKodu) && MetinKodu.length > 0) {

            this.metinKodlari = MetinKodu;
        }else{
            this.metinKodlari = (MetinKodu) ? [MetinKodu] : [''];
        }

        return this.metinKodlari;
    }
}
Metinler.sub.baslat.prototype = Metinler.sub;

window.Metinler = Metinler;

})()

Código

preguntado el 28 de agosto de 12 a las 09:08

2 Respuestas

El problema que está viendo es que su constructor está devolviendo un valor específico:

return this.metinKodlari;

... que devuelve su matriz interna (bueno, su matriz de una matriz).

Elimine esta línea y devolverá su baslat ejemplo.

Respondido 28 ago 12, 10:08

Su baslat la función es defectuosa:

  • Te equivocaste length in MetinKodu.lenght > 0.
  • Estas devolviendo el metinKodlari matriz, mientras que debe devolver la recién creada this contexto. usos de jQuery makeArray on this para almacenar los elementos DOM pasados ​​en el objeto jQuery similar a una matriz. Sin embargo, en su caso, simplemente desea almacenar los elementos pasados ​​en el metinKodlari matriz en lugar de en el this objeto en sí.

Esto debería funcionar:

    baslat: function(MetinKodu) {
        if ($.isArray(MetinKodu) && MetinKodu.length > 0) {
            this.metinKodlari = MetinKodu;
        } else {
            this.metinKodlari = (MetinKodu) ? [MetinKodu] : [''];
        }
        return this;
    }

Respondido 28 ago 12, 10:08

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