2012-08-22 62 views
0

我有一个JavaScript函数初始化一组游戏的全局变量。用自定义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
// 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或库可能使用的内容相冲突。

+0

感谢这工作 –

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,此功能将立即将列出的属性附加到该对象。