2010-06-06 74 views
1

在我的Javascript拖放構建應用程序中,可以構建各種建築物。這些具體特徵都保存在一個對象,像重新初始化javascript對象的屬性

var buildings = { 
house: ['#07DA21',12,12,0,20], 
bank: ['#E7DFF2',16,16,0,3], 
stadium: ['#000000',12,12,0,1], 
townhall: ['#2082A8',20,8,0,1], 
etcetera 
} 

所以每個建築都有一些特徵,如顏色,大小,看它可以被稱爲建築[市政廳] [0](指顏色)。對象隨着用戶改變而改變。然而,當點擊「重置」時,整個對象應該重新設置爲初始設置以重新開始,但我不知道如何去做。對於普通的對象來說就像。

function building() {} 
var building = new building(); 
delete building; 
var building2 = new building(); 

您可以輕鬆刪除並重新制作它,以便重置屬性。但我的對象被自動初始化。有沒有辦法將我的對象轉換爲可以刪除和新創建的對象,而不會使它變得非常複雜,或者存儲此信息的更好方法?

+0

您不能在全局範圍內聲明'delete'屬性,也不能'刪除'函數。請參閱http://perfectionkills.com/understanding-delete/#property_attributes – 2010-06-06 17:44:26

+0

這是一個有趣的閱讀,但有什麼不同的方式來設置我的代碼,以便它不是全局的,因此可刪除,如對象的示例用'新'聲明? – Pino 2010-06-06 17:54:14

+0

@Marcel,當然你可以刪除全局變量(變量,因爲你不聲明屬性)。 – 2010-06-06 17:55:04

回答

1

只需使用拷貝/克隆方法來恢復原來的狀態

var defaults = { 
    foo: "bar" 
}; 
var building; 

function reset(){ 
    building = {}; 
    for (var key in defaults) { 
     if (defaults.hasOwnProperty(key){ 
      building[key] = defaults[key]; 
     } 
    } 
} 

現在你可以叫reset(),每當你需要有building復位。

3

您可以將初始狀態保持爲對象上的原型。

var Base = function(){}; 
    Base.prototype={a:1,b:2}; 
var c = new Base(); 

現在,您可以將a或b的值更改爲任何您想要的值。 要恢復,只需用

delete c.a or delete c.b 

你會得到你的初始值回。 希望得到這個幫助。