hvordan man omgår ‘this’ scope problemer for closures

Man kan ikke uden videre bruge ‘this’ i en indre anonym funktion der bruger information fra en ydre. (se en god beskrivelse ifbm closures i  kapitel 4 i “Javascript: the good parts” ).

Problemet kan omgåes ved at benytte “bind” fra prototypejs på flg. facon:


ComboBox.prototype.loader= function (){
if(this.dataStore[this.paramName]===undefined){
new Ajax.Request (
this.url,{
method: 'post',
asynchronous: true,
parameters: this.parameters,
onSuccess: function (transport){
var response=transport.responseText;
this.dataStore.data[this.paramName]=response.evalJSON();
this.render();
}.bind(this),
onFailure: function (transport){
alert('failed to retrieve '+this.paramName+' data');
}.bind(this)
}
}