我正在尝试将从Facebook API调用收到的数据存储到类属性中。
我的构造函数:
function Foo() {
this.bar = {
likes: 0
};
}
更新对象的方法:
Foo.prototype.update = function() {
FB.api('/me/likes', function (response) {
// this.bar['likes'] is out of the scope
});
}
var foo = new Foo();
foo.update();
这是可能的还是我应该尝试进行同步通话? 我不确定Facebook的API是否支持它。
由于
答案 0 :(得分:2)
Foo.prototype.update = function()
{
var self = this;
FB.api('/me/likes', function (response){
self.bar["likes"] = response;
});
}
如果将this
缓存为本地变量,则可以在回调函数中引用它。
或者,您可以使用ES5绑定命令或jQuery替代$.proxy
。或下划线替代_.bind
FB.api('/me/likes', (function (response){
this.bar["likes"] = response;
}).bind(this));
FB.api('/me/likes', $.proxy(function (response){
this.bar["likes"] = response;
}, this));
FB.api('/me/likes', _.bind(function (response){
this.bar["likes"] = response;
}, this));
所有这些都将确保您的函数中的this
值符合您的预期。 (请注意,.bind
是ES5,旧版浏览器中断了。)
如果你有jQuery,你可以使用$ .proxy。如果你不想包含jQuery,请包含下划线,因为它要小很多