将'this'与多个对象一起使用

时间:2012-10-16 04:03:48

标签: javascript this

我正在用facebook api和phonegap构建一个backbone.js应用程序。

在我的用户模型中,我正在尝试附加一个监听器以查看用户何时登录。

Myapp.Models.User = Backbone.Model.extend({
    initialize: function(){
           FB.Event.subscribe('auth.login', function(response){
            console.log('logged-in event');
            this.get_me();

        });
    },
    get_me: function(){
    console.log('use the api to get user details');
    }
});

当然,当我这样做时,this是(我相信)附加到FB,而不是Myapp。 我试过了

var this_user = this;
 FB.Event.subscribe('auth.login', function(response,this_user){
   this_user.get_user();
}

但仍然失败。

我已经阅读了各种关于如何使用this的博客,但在使用多个对象时似乎无法获得我真正理解的博客,以及如何回溯原始对象。

2 个答案:

答案 0 :(得分:2)

你有什么应该工作,但请注意这一部分:

var this_user = this;
 FB.Event.subscribe('auth.login', function(response,this_user){
   this_user.get_user();
}

this_user参数不应该在匿名函数声明中。这是因为Facebook从不传递回调中的第二个参数,因此它最终成为null;实际上,您应该在this_user.get_user()语句中收到JS错误。

var this_user = this;
 FB.Event.subscribe('auth.login', function(response){
   this_user.get_user();
}

答案 1 :(得分:1)

var this_user = this;
 FB.Event.subscribe('auth.login', function(response,this_user){
   this_user.get_user();
}

由于您具有相同名称的参数,this_user查找将无法解析为其父作用域。改变其中一个。