【发布时间】:2013-02-28 14:32:50
【问题描述】:
关于this question,我正在尝试添加回调以取回数据。所以我尝试了这个:
var subgroupIds = [];
var that = this;
this.getSubGroups = function (groupId,callback) {
var anotherObject = this;
this.getGroups("groupId="+groupId, function(groups) {
if ($.isEmptyObject(groups)) {
return;
} else {
$.each(groups, function(index,group) {
subgroupIds.push(group.id);
that.getSubGroups(group.id);
});
anotherObject.callback(group.id);
}
});
}
我认为在上一个问题之后我对闭包有了更好的理解,但我想我没有......我收到以下错误:
Uncaught TypeError: Object [object Window] has no method 'callback'
我在这里做错了什么?
编辑
getGroups 的内容如下:
this.getGroups = function(filter,callback,error_callback) {
this.getJSON('/'+apiVersion+'/groups/',function(data){
// run through the filter engine
output = runFilter(data, filter);
callback(output);
},error_callback);
}
【问题讨论】:
-
也许
this.getGroups应该是anotherObject.getGroups? -
你为什么用
anotherObject而不是that?还有为什么要回调一个属性,不就是要回调函数参数吗? -
什么是
this/that?当你声明this.getSubGroups时,this指的是window,所以你没有做正确的事情来让this指代正确的事情。然后,anotherObject只是指同一个,window。另外,你为什么要使用anotherObject.callback(group.id)?你不想要callback(group.id);吗? -
我没有看到任何递归,顺便说一句。
-
@beri 'that.getSubGroups(group.id);'是递归的
标签: javascript recursion callback closures