2012-08-22 94 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,此功能將立即將列出的屬性附加到該對象。