2015-10-14 60 views
3

我有一個創建一個對象,並將其保存在另一個對象的ID的功能:在網上搜索使用Javascript - 試圖遏制動態屬性中的對象

var enemyList = {}; //global var 

Enemy = function() { 
    var id = Math.random(); //random id 
    var enemy = { 
    some properties 
    }; 
    enemyList.id = enemy; 
} 

現在,我發現「for循環」,我爲了更新包含敵方目標參考每個ID編輯:

setInterval(update, 40); //execute update all the time 
var frameCount = 0; //global var 

function update { 
    if (frameCount % 100 === 0) // spawns new enemy every 4 seconds 
    Enemy(); 

    for (var key in enemyList) { 
    enemyList.key.update(); //move them around...  
    } 
} 

每4秒一個新的敵人被創建,那麼這個循環應該根據一些邏輯移動的每個敵人......問題是,一旦一個新的敵人被創造出來,它就代替了舊的敵人,四處移動,然後被替換掉下一個產生的敵人,即使它不應該,因爲他們有獨特的ID。爲什麼會發生? 謝謝你的時間。

+0

你能否包含enemyList var的實現?請修復您的縮進。 – Reinard

回答

2

當你說

enemyList.id = enemy; 

您在enemy對象實際上設置爲enemyList對象的id財產,沒有創建與id值的新屬性。它應該是

enemyList[id] = enemy; 

這同樣適用於for循環。

enemyList[key].update(); 

補充建議:

  1. for..in將得到所有的枚舉,該enemyList對象的繼承屬性,而不僅僅是它的屬性。因此,它是不太正常有一個if條件周圍,就像這樣

    for (var key in enemyList) { 
        if (enemyList.hasOwnProperty(key)) // make sure it is the own property 
        enemyList.key.update();   // move them around... 
    } 
    
  2. setInterval(update, 40);update將每40毫秒,而不是4秒執行。所以,它應該是setInterval(update, 4000);

+0

你能解釋一下關於使用enemyList [id] = enemy的更多信息;而不是enemyList.id = enemy; ?有什麼不同?他們最終都被轉換爲隨機數,他們不是? – RunningFromShia

+0

讓我們說,'id'是0.5。現在,'enemyList.id'表示'enemyList'中的一個屬性'id',而不是'enemyList [0.5]' – thefourtheye

+0

好吧首先謝謝你,你的代碼工作,[]確實解決了問題。所以,你說在enemyList.id中的id不能被先前的變量替換(比如var id = random),那爲什麼它在使用enemyList [id]時是可替換的?我現在可能理解它的方式是使用[id] javascript實際上期望var。 – RunningFromShia