2011-05-10 10 views
5

Ho un piccolo problema con un oggetto che utilizza jquery. dal momento che jquery sovrascrive questo puntatore, non posso chiamare i miei metodi secondari senza ricorrere a salvare il puntatore in una variabile che è preferibile o esiste una soluzione migliore? C'è un modo per salvare questo puntatore nell'oggetto (come un metodo di classe con un altro nome)?chiamate di metodo interne javascript quando si utilizza jquery

Cercando di imparare javascript con javascript le parti buone ma non penso di capire ancora tutte le stranezze :).

//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() 

migliori saluti Anders Olme immagino che questo è simile a Overwritten "this" variable problem or how to call a member function?

+0

Stai utilizzando Firefox 4? 'Object.create' è molto nuovo ed è supportato solo da FF4 AFAIK. – RoToRa

+0

Penso che non sia una soluzione migliore - 'var that = this' è un modo classico per risolvere problemi come quello –

+0

ho strappato il codice di creazione dell'oggetto da javscript alle parti buone e lo ho incluso altrove. – Buzzzz

risposta

1

In generale, sì, questo è quello che devi fare.

In questo caso specifico, jQuery fornisce assistenza.

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

Vedere docs for bind(). Internamente, jQuery sta facendo esattamente la stessa cosa che stai facendo lì, quindi non farà alcuna differenza significativa in termini di prestazioni, ma potrebbe rendere il tuo codice un po 'più gestibile.

+0

ok guarderò in quell'api L'id è un selettore molto più prolisso nel codice reale ma suppongo che l'esempio sarebbe meglio se cambiassi a #id. – Buzzzz

Problemi correlati