2012-11-08 76 views
1

可能重複:
Javascript infamous Loop problem?添加此對象插入到數組

for (var i=0; i<songList.length; i++){ 
     test.init({ 
     }); 
} 

var test = { 
    init: function (params) { 
     var my = this; 

     var backend = WaveSurfer.Audio; 

     if (!params.predrawn) { 
      backend = WaveSurfer.WebAudio; 
     } 
     var id = playList.length; 
     this.id = id; 

     this.backend = Object.create(backend); 
     this.backend.init(params); 

     this.drawer = Object.create(WaveSurfer.Drawer); 
     this.drawer.init(params); 

     this.backend.bindUpdate(function() { 
      my.onAudioProcess(); 
     }); 

     this.bindClick(params.canvas, function (percents) { 
      my.playAt(percents); 
     }); 

    playList.push(my); 

當調試這個腳本:我的ID爲0,爲所述第一元件;但是當我突然進入第二個循環時,兩個ID都變成1.這怎麼可能?

enter image description here

+0

所以...你的元素添加到播放列表中添加新的項目,你困惑,它的1元大? – Wug

+1

不,我很困惑,他們有兩個ID:1,當我期望第一個是0,第二個是1 – Thomas

+0

@ThomasVerbeke代碼有'this.id = id',它將id設置爲1我的 – Amareswar

回答

4

因爲第一次播放列表是空的,之所以播放列表的長度爲零,但初始化稱之爲後有一個項目,以便播放列表的長度成爲1秒的init調用,這樣的id的值取決於初始化呼叫的號碼。

由於您沒有創建任何新對象,因此每次my都會引用相同的對象。因此my中的任何更改都會反映在播放列表中的所有推送項目中。

修改後的代碼:如果你想在每一個初始化調用

var test = { 
    init: function (params) { 
     var my = {}; 

     var backend = WaveSurfer.Audio; 

     if (!params.predrawn) { 
      backend = WaveSurfer.WebAudio; 
     } 
     var id = playList.length; 
     my.id = id; 

     my.backend = Object.create(backend); 
     my.backend.init(params); 

     my.drawer = Object.create(WaveSurfer.Drawer); 
     my.drawer.init(params); 

     my.backend.bindUpdate(function() { 
      my.onAudioProcess(); 
     }); 

     my.bindClick(params.canvas, function (percents) { 
      my.playAt(percents); 
     }); 

    playList.push(my);