有没有办法在javascript facebook sdk api回调中传递上下文?这是一个简单的例子。现在这不起作用,因为我的回调函数中的变量'this.name'将是未定义的,因为它不在我的用户对象上下文中。知道怎么做吗?
function user(id) {
this.id = id;
this.getUserName = function(fields,callback){
FB.api({
method:'fql.query',
query: 'SELECT '+ fields.toString() +' FROM profile WHERE id=' + this.id
},
callback
);
}
this.getUserName(['name'],function(response){this.name = response[0].name;});
}
var amigo = new user('fb_id_here');
答案 0 :(得分:3)
闭包是你的朋友。
function user(id) {
this.id = id;
this.getUserName = function(fields,callback){
FB.api({
method:'fql.query',
query: 'SELECT '+ fields.toString() +' FROM profile WHERE id=' + this.id
},
callback
);
}
this.getUserName(['name'],(function(this_user) {
return function(response){this_user.name = response[0].name;}
})(this));
}
var amigo = new user('fb_id_here');
答案 1 :(得分:1)
编辑:这只是解决方案的一部分。 Apply()可以与闭包一起使用来返回绑定到对象范围的函数(参见Jamie的帖子)。
例如:
function bindScope = function(context, obj)
{
return function()
{
return obj.apply(context);
}
}
我相信你可以使用javascript的apply()来改变上下文。尝试将第8行更改为callback.apply(this)。
上下文资源&申请 - http://kossovsky.net/index.php/2009/07/function-context-and-apply-function/