【问题标题】:use of 'this' with multiple objects对多个对象使用“this”
【发布时间】:2012-10-16 04:03:48
【问题描述】:

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

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

Myapp.Models.User = Backbone.Model.extend({ 初始化:函数(){ FB.Event.subscribe('auth.login', function(response){ console.log('登录事件'); this.get_me(); }); }, 获取我:函数(){ console.log('使用api获取用户信息'); } });

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

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

但这仍然失败。

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

【问题讨论】:

    标签: javascript this


    【解决方案1】:

    你所拥有的应该可以工作,但请注意这部分:

    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();
    }
    

    【讨论】:

      【解决方案2】:
      var this_user = this;
       FB.Event.subscribe('auth.login', function(response,this_user){
         this_user.get_user();
      }
      

      this_user 查找不会解析到它的父作用域,因为你有一个同名的参数。改变一个或另一个。

      【讨论】:

      • 发布的第一个示例根本没有第二个参数。我认为应该删除订阅回调的this_user 参数。
      • @Cory 是的,这就是我想要的。
      • @Cory 你是对的,this_user 根本不应该在回调中。正如杰克在下面所说。感谢您的帮助。
      猜你喜欢
      • 2015-03-19
      • 2013-03-08
      • 1970-01-01
      • 2023-03-12
      • 2011-07-25
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多