我在使回调函数正常工作时遇到一些问题。这是我的代码:
SomeObject.prototype.refreshData = function()
{
var read_obj = new SomeAjaxCall("read_some_data", { }, this.readSuccess, this.readFail);
}
SomeObject.prototype.readSuccess = function(response)
{
this.data = response;
this.someList = [];
for (var i = 0; i < this.data.length; i++)
{
var systemData = this.data[i];
var system = new SomeSystem(systemData);
this.someList.push(system);
}
this.refreshList();
}
基本上 SomeAjaxCall 正在发出 ajax 数据请求。如果成功,我们使用回调“this.readSuccess”,如果失败,则使用“this.readFail”。
我发现 SomeObject.readSuccess 中的“this”是全局 this(又名窗口对象),因为我的回调被作为函数而不是成员方法调用。我的理解是,我需要使用闭包来保留“this”,但是,我无法让它发挥作用。
如果有人能够告诉我我应该做什么,我将不胜感激。我仍在思考闭包如何工作,特别是在这种情况下它们将如何工作。
Thanks!
那么最简单的事情就是将“this.readSuccess”包装在另一个函数中:
SomeObject.prototype.refreshData = function()
{
var obj = this;
var read_obj = new SomeAjaxCall("read_some_data", { },
function() { obj.readSuccess(); }, function() { obj.readFail(); });
}
一些 Javascript 框架提供了一个实用程序来将函数“绑定”到对象,这仅仅意味着它为您创建这些小函数之一。请注意,变量“obj”将被这些小函数“记住”,因此当调用处理程序时,“this”引用将指向用于调用“refreshData”的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)