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

Replacing window with custom javascript global namespace

本文关键字:替换 窗口 命名空间 全局 自定义 javascript      更新时间:2023-09-26

我有一个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.

我该怎么做?

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

 var cartTotaler = (function () {
     var total = 0; tax = 0.05;
      // other code
      return {
         addItem : function (item) { },
         removeItem : function (item) { },
         calculateTitle : function () { }
     };
 }());

谢谢。

// 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或库使用的名称冲突。

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

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

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