OO és az eseménykezelés
Tiszteletem,
A következő problémába ütköztem, gondolom mással is előfordult: Egy osztály belselyében legyen a következő kód (én special az prototype.js-t használom, de szerintem a legtöbb eseménykezelőnél is ez a probléma előjön)Azt értem, hogy miért az undefined íródik ki, a kérdés az lenne, hogy hogyan lehet ezt elegánsan kivédeni? Hogy tudok a this.processResponse-ban hozzáférni a hívó referenciájához anélkül, hogy valami kókány megoldással globális változóhoz férnék, ami teljesen ellentmond az egységbezárásnak...
Valakinek van valami ötlete?
köszi: .a
■ A következő problémába ütköztem, gondolom mással is előfordult: Egy osztály belselyében legyen a következő kód (én special az prototype.js-t használom, de szerintem a legtöbb eseménykezelőnél is ez a probléma előjön)
function MyClass(){
this.foo = 42;
this.myFunc = function(){
var url = '...';
var pars = '...';
var myAjax = new Ajax.Request(
url,
{
method: 'get',
parameters: pars,
onComplete: this.processResponse
}
);
};
this.processResponse = function(response){
// processing response...
window.alert('foo is:' + this.foo); // eredménye: foo is: undefined
window.alert('foo is:' + myInstance.foo); // eredménye: foo is: 42
}
};
var myInstance = new MyClass();
Valakinek van valami ötlete?
köszi: .a
lokális vagy bind
Bővebben a prototype doksijában olvashatsz.
2. megoldás: "this.foo = 42;" helyett "var foo = 42;" majd "this.foo" helyett "foo"
Egységbezárás szempontjából még jobb, mert így kívülről nem is lehet hozzáférni.
Ha már úgyis prototype-ot használsz, akkor miért nem Class-al készítesz osztályt?
Más módszer?
Mozillával, prototype nélkül, a következő kódot hogyan kell átdolgozni, hogy az működőképes legyen?
talán így
köszönöm