关于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);
}
答案 0 :(得分:1)
不需要anotherObject.callback(group.id);
,您需要的是callback(group.id);
看起来您将this
与arguments
对象混淆。
arguments
包含传递给函数的所有参数:
var aFunction = function () {
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
};
aFunction(1, 2, 3, 4); // 1, 2, 3, 4
虽然this
基本上是指函数的“所有者”(粗略地说,无论是在点之前发生的事情):
var aFunction = function () {
console.log(this);
};
var object1 = { f: aFunction, name: "object1" };
var object2 = { f: aFunction, name: "object2" };
object1.f(); // Object { name="object1", f=function()}
object2.f(); // Object { name="object2", f=function()}
aFunction(); // Window
答案 1 :(得分:0)
回调是一个参数,它没有绑定到上下文。
我认为你想要的是用anotherObject
作为this
来调用回调,对吗?
您可以通过以下方式实现这一目标:
$.proxy(callback, anotherObject)(group.id);
或者,如果您只想执行回调,并且想要使用闭包,则需要添加:
this.callback = callback; //before
var anotherObject = this;