jQuery como arquitectura
Frecuentes
Visto 209 veces
2
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;
})()
2 Respuestas
1
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
1
Su baslat
la función es defectuosa:
- Te equivocaste
length
inMetinKodu.lenght > 0
. - Estas devolviendo el
metinKodlari
matriz, mientras que debe devolver la recién creadathis
contexto. usos de jQuerymakeArray
onthis
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 elmetinKodlari
matriz en lugar de en elthis
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 javascript jquery architecture reverse-engineering or haz tu propia pregunta.