Javascript 为window.object实现私有函数

Javascript 为window.object实现私有函数,javascript,global,Javascript,Global,我正在为一个API创建一个包装器,它将在两个不同的应用程序中使用 我正在使用一个全局对象,并将各种函数作为不同的键放入该对象中。所以我要: window.globalContainer = { APIEndpoint1: function(){ make API call and resolve result }, APIEndpoint2: function(){}, ... } API调用的所有内容都直接在函数中。也就是说,您可以从控制台转到window.globa

我正在为一个API创建一个包装器,它将在两个不同的应用程序中使用

我正在使用一个全局对象,并将各种函数作为不同的键放入该对象中。所以我要:

window.globalContainer = {
  APIEndpoint1: function(){
    make API call and resolve result
  },
  APIEndpoint2: function(){},
  ...
}
API调用的所有内容都直接在函数中。也就是说,您可以从控制台转到window.globalContainer.apidemp1,查看整个函数


对于跨多个应用程序使用并充当助手库的东西来说,这种做法通常不好吗?还是可以接受?我在控制台中查看了jQuery,它似乎也做了同样的事情。如果不赞成,如何在全局对象中实现私有函数

您可以使用IIFE实现私有函数/属性

 window.globalContainer = function () {
      //what ever you define here is not accessible outside. Only the API in 
      //the returned object is accessible outside

      function private1() {
           make API call and resolve result
      }

      return {
          APIEndpoint1: function(){
            private1();
          },
          APIEndpoint2: function(){},
          ...
      }
    }();

匿名闭包是一个很好的起点:

(function (global) {
    var foo = global.foo || {};
    //accessible
    foo.publicVar = 5;
    foo.publicFcn = function (a, b) {
        privateFcn(a, b);
        ...
    };
    //not accessible
    var privateVar = 5;
    function privateFcn(a, b) {
        ...
    }

    global.foo = foo;
})(window)
有了这些,您可以非常直观地构建一个库,而不会污染名称空间


您可以明确地说出希望访问哪些变量和函数。

@m-davis,我有多个对象绑定到window.foo上。我遇到了一个错误,我可以添加的唯一方法,比如说,
foo.bar.get
,就是首先用
foo.bar={}
实例化
foo.bar
,是否有更好的方法动态声明这些新对象?@somethingsiming据我所知,这是最好的方法。您可以这样做:foo.bar={get:function(params){return baz;},set:function(param){return baz=param;}。您也可以等到
global.foo
语句之前,说
foo.bar=bar
。通过这种方式,您可以将
bar
构建为该语句上方的任何函数、对象或变量。(注意,您必须实例化
var bar={};
函数栏(…){…}
无论如何)明白了。谢谢你的帮助