用自定义javascript全局命名空间替换窗口

时间:2012-08-22 19:26:56

标签: javascript namespaces global-variables

我有一个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文件中。我还想用“fight.p1HP”等不同的全局命名空间替换“window”。

我该怎么做?

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

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

      // other code

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

感谢。

2 个答案:

答案 0 :(得分:2)

// 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或库可能使用的东西冲突。

答案 1 :(得分:1)

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

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

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