将从匿名函数接收的数据保存在类对象中

时间:2011-05-10 00:24:56

标签: javascript facebook asynchronous anonymous-function

我正在尝试将从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是否支持它。

由于

1 个答案:

答案 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,请包含下划线,因为它要小很多