2011-05-10 19 views
5

Tengo un pequeño problema con un objeto que usa jquery. como jquery sobrescribe este puntero, no puedo llamar a mis métodos secundarios sin recurrir a guardar el puntero en una variable que es la preferida o ¿hay una mejor solución? ¿Hay alguna manera de guardar este puntero en el objeto (como un método de clase con otro nombre)?javascript llamadas a métodos internos al usar jquery

Intentando aprender javascript con las partes buenas de Javascript, pero no creo que entienda todas las peculiaridades todavía :).

//from javscript the good parts 
if (typeof Object.create !== 'function') { 
    Object.create = function (o) { 
     var F = function() {}; 
     F.prototype = o; 
     return new F(); 
    }; 
} 

var Tester = { 
    printData: function (text) { 
     console.log(text) 
    }, 
    start: function() { 
     var that = this; 
     jQuery('id').click(function() { 
      that.printData('firstColumn') 
    }); 
    } 
}; 

var test = Object.create(Tester) 

test.start() 

Saludos Anders Olme supongo que esto es similar a Overwritten "this" variable problem or how to call a member function?

+0

¿Estás usando Firefox 4? 'Object.create' es muy nuevo y solo es compatible con FF4 AFAIK. – RoToRa

+0

No hay mejor solución, creo - 'var that = this' es una forma clásica de resolver problemas como ese –

+0

arrebaté el código de creación de objeto de las partes buenas de javscript y lo tengo incluido en otro lugar. – Buzzzz

Respuesta

1

En general, sí, eso es lo que tiene que hacer.

En este caso específico, jQuery le proporciona algo de ayuda.

jQuery('id') // <-- should be #id ? 
    .bind('click', { myThing : this }, function (e) { 
     e.data.myThing.printData('firstColumn'); 
    }) 
; 

Ver el docs for bind(). Internamente, jQuery solo está haciendo exactamente lo mismo que tú haces allí, por lo que no hará una diferencia significativa en términos de rendimiento, pero podría hacer que tu código sea un poco más manejable.

+0

bien se verá en esa API. La identificación es un selector mucho más detallado en el código real, pero creo que el ejemplo sería mejor si cambiara a #id. – Buzzzz

Cuestiones relacionadas