代码之家  ›  专栏  ›  技术社区  ›  Scott

从名字间隔的javascript引用其他函数

  •  0
  • Scott  · 技术社区  · 15 年前

    所以我试图把一堆代码合并成一些很好的名字空间函数,但是很难让它们一起工作。例如,我有这样一个(为了清楚起见,编辑了下来):

    YW.FB = function() {
       return {
            init: function(fncSuc, fncFail) {
                    FB.init(APIKey, "/services/fbconnect/xd_receiver.htm");
                    FB.Bootstrap.requireFeatures(["Connect"]);
                    if(typeof fncSuc=='function') fncSuc();
        },
    
            login: function(fncSuc) {
                this.FB.Connect.requireSession(function() { 
                    if(typeof fncSuc=='function') fncSuc();
                });
          },
            getUserInfo: function() {
                var userInfo = new Object;
                FB.Facebook.apiClient.users_getInfo([FB.Facebook.apiClient.get_session().uid],["name"],function(result, ex){
                    userInfo.name = result[0]['name'];
                    userInfo.uid = result[0]['uid'];
                    userInfo.url  = FBName.replace(/\s+/g, '-');
                    return userInfo;
                })
            }
       };
    }();
    

    在一个普通的页面上我可以做:

      FB.init(APIKey, "/services/fbconnect/xd_receiver.htm");
      FB.Bootstrap.requireFeatures(["Connect"]);
      var userInfo = new Object;
      FB.Facebook.apiClient.users_getInfo([FB.Facebook.apiClient.get_session().uid],["name"],function(result, ex){
                    userInfo.name = result[0]['name'];
                    userInfo.uid = result[0]['uid'];
                    userInfo.url  = FBName.replace(/\s+/g, '-');
                    return userInfo;
                })
    

    而且有效。

    我一直在尝试:

    YW.init();
    YW.login();
    YW.getUserInfo();
    

    但没用我一直从yw.getuserinfo得到“fb.facebook未定义” 我也可能做错了。所以fb.init,fb.facebook的东西使用的是facebook连接库。我做错了吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Bjorn    15 年前

    如果您查看浏览器在firebug或类似的web调试器中解析的javascript,您会看到facebook connect javascript吗?看起来它不在范围之内,而且由于FB在全球范围内,这意味着它根本不在范围之内与命名空间无关。javascript中的global无处不在。