为window.object实现私有函数

时间:2017-08-01 00:37:45

标签: javascript global

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

我使用全局对象并将各种函数作为不同的键放入该对象中。所以我会:

window.globalContainer = {
  APIEndpoint1: function(){
    make API call and resolve result
  },
  APIEndpoint2: function(){},
  ...
}

API调用的所有内容都直接在函数中。也就是说,您可以从控制台转到window.globalContainer.APIEndpoint1并查看整个函数。

对于在多个应用程序中使用并充当帮助程序库的内容,这通常是不好的做法吗?或者这可以接受吗?我在控制台中查看了jQuery,它似乎做了很多相同的事情。如果不满意,我如何在全局对象中实现私有函数?

2 个答案:

答案 0 :(得分:1)

一个好的开始是匿名闭包:

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

通过这些,你可以非常直观地构建一个库,污染命名空间。

您明确说明了您希望哪些变量和函数可供访问。

答案 1 :(得分:0)

您可以使用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(){},
          ...
      }
    }();