2012-01-14 98 views
1

我正在製作一個JavaScript遊戲,具有幾個級別,存儲在json中。 當加載,我運行一個函數來通過替換不存在可以通過默認值的值「解析」級對象,或者通過對象替換一些值,如:javascript替代嚴格評估

//i is the variable I use to loop through the enemies 

if (typeof(level.enemies[i].life)=="undefined") { 
level.enemies[i].life=100; 
} 

if (typeof(level.enemies[i].follow)=="number") { 
level.enemies[i].follow=level.enemies[level.enemies[i].follow]; 
// replace the number of the enemy, 
// by a reference to the actual enemy. 
} 

的問題是,我有很多的整個功能的「如果」,類似這些,我想知道如果我以某種方式導致他們的功能,所以我可以這樣做:

replaceByType(level.enemies[i].life,"undefined",100); 
replaceByType(level.enemies[i].follow,"number",level.enemies[level.enemies[i].follow]); 

可悲的是,我不知道如何做到這一點,因爲他們沒有辦法通過引用傳遞一個變量(除了一個對象)。也許有另一種方法來簡化我的代碼?

回答

0

由於您可以通過引用傳遞對象,因此可以傳遞要替換的對象的屬性。

function replaceByType(obj, property, type, value) { 
    if(typeof obj[property] === type) { 
    obj[property] = value; 
    } 
} 

,你可以撥打幾乎是如何你想:

replaceByType(level.enemies[i], "life", "undefined", 100); 
replaceByType(level.enemies[i], "follow", "number", level.enemies[level.enemies[i].follow]); 
+0

太棒了!我沒有想過將物體與物體分開。我們甚至可以做'replaceByType(window,「variable」,「undefined」,5);'改變一個全局變量! – Zelenova 2012-01-14 23:23:32

0
Pass anonymous functions: 

function replaceByType(test, pass, fail){ 
    if(test()) return pass; 
    else return fail; 
} 

replaceByType(function(){return level.enemies[i].life},"undefined",100); 

這推遲評估,直到裏面replaceByType

1

我想你想是這樣的:

replaceIfAbsent(level.enemies[i], "life", 100); 

function replaceIfAbsent(obj, property, newVal){ 
    if (typeof obj[property] === "undefined") 
     obj[property] = newVal; 
} 

或者爲什麼不是全部同時做多個屬性:

function replaceIfAbsent(obj, properties){ 
    for (var prop in properties) 
     if (typeof obj[prop.name] === "undefined") 
      obj[prop.name] = prop.value; 
} 

replaceIfAbsent(level.enemies[i], [{name: "life", value: 100}, {name: "number", value: 12}]); 

你使用jQuery?如果是這樣,您可以這樣做:

$.extend(level.enemies[i], {"life": 100, "number": 12}); 
+1

+1的jQuery.extend建議(這將是我唯一的建議;-) - 其他圖書館,不僅jQuery提供了合併功能。 – 2012-01-14 23:03:58