【问题标题】:Replacing window with custom javascript global namespace用自定义 javascript 全局命名空间替换窗口
【发布时间】:2012-08-18 06:54:27
【问题描述】:

我有一个 javascript 函数,用于为游戏初始化一堆全局变量。

 function buildVariables(fs,fm) {
     window.p1HPStart = fm.p1hp;
     window.p2HPStart = fm.p2hp;
     window.p1HP = 100;
     window.p2HP = 100;
     window.trn = 0;
  }

现在所有这些 javascript 都在同一个 HTML 文件中。我想将它移动到它自己的 .js 文件中,并将其包含在这个 HTML 文件中。我还想将“window”替换为不同的全局命名空间,例如fight.p1HP。

我该怎么做?

我在其他类似问题中看到过类似下面的代码作为建议的答案,但我不太明白如何使用它来替换窗口。

 var cartTotaler = (function () {
     var total = 0; tax = 0.05;

      // other code

      return {
         addItem : function (item) { },
         removeItem : function (item) { },
         calculateTitle : function () { }
     };
 }());

谢谢。

【问题讨论】:

    标签: javascript namespaces global-variables


    【解决方案1】:
    // initialize your own global object
    if (!window.mySpace) {
        window.mySpace = {};
    }
    
    // then use it
    function buildVariables(fs,fm) {
         mySpace.p1HPStart = fm.p1hp;
         mySpace.p2HPStart = fm.p2hp;
         mySpace.p1HP = 100;
         mySpace.p2HP = 100;
         mySpace.trn = 0;
      }
    

    然后只需确保在任何地方都需要自己的变量之一,并在其前面使用命名空间:

    mySpace.variableName
    

    注意:这并没有真正“替换”window 对象(因为没有办法这样做) - 它只是将所有全局变量放入一个主全局对象中,而不是每一个都污染全局命名空间您的变量之一。

    名称mySpace 可以是您想要的任何名称。通常,它应该是您的应用程序独有的东西,不太可能与任何其他 javascript 或库可能使用的东西发生冲突。

    【讨论】:

      【解决方案2】:
      (function(global){
           global.p1HPStart = fm.p1hp;
           global.p2HPStart = fm.p2hp;
           global.p1HP = 100;
           global.p2HP = 100;
           global.trn = 0;
      }(window));
      

      这将创建一个“立即调用的函数表达式”。 window 被传递到函数中,然后将一些属性附加到它。

      您可以将window 更改为您想要的任何对象,例如fight.p1HP,此函数将立即将列出的属性附加到该对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-11
        • 2013-12-13
        • 2013-11-19
        • 2016-08-03
        • 1970-01-01
        • 2013-02-22
        • 2017-01-04
        • 2019-09-21
        相关资源
        最近更新 更多