以下のコードでは、クロージャーを使用して「this」参照を「保存」し、それをコールバックに渡しました。しかし、私は疑問に思っていました、同じことを達成するための代替技術はありますか?
function App()
{
this.number = 75;
}
App.prototype.xmlHandler = function(self)
{
if (this.number == 99) //true at run-time
console.log("this.number == 99 is true");
else
console.log("this.number == 99 is false");
if (self.number == app.number) //true at run-time
console.log("self.number == app.number is true");
else
console.log("self.number == app.number is false");
};
App.prototype.loadXML = function(url, handler)
{
var self = this;
var req = new XMLHttpRequest();
req.number = 99;
req.addEventListener("load", function(){handler.call(req, self);}, false);
req.open('GET', url, true);
req.send();
};
App.prototype.init = function()
{
this.loadXML('resources.xml', this.xmlHandler);
};
var app = new App();
app.init();
xmlHandlerメソッドには、基本的に2つの異なる「this」があります(1つはreqオブジェクト用、もう1つはappオブジェクト用)。それで、1つの屋根の下で2つの異なる「this」値を取得するための代替手法はありますか?