在下面的代码中,我使用闭包来“保存”“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 方法下,本质上有两个不同的“this”(一个 [this] 用于 req 对象,另一个 [self] 用于 app 对象)。那么,是否有替代技术可以在一个屋檐下获得两个不同的“this”值?