2012-12-03 108 views
0

我可以在for循環中創建多個函數嗎?for循環中的多個函數

var mySound1 = new buzz.sound("laser-01", { formats: [ "ogg", "mp3", "acc" ]}); 
var mySound2 = new buzz.sound("alien-noise-01", {formats: [ "ogg", "mp3", "acc" ]}); 

var sound = [mySound1, mySound2] 

// additional sounds 
var $i; 
for ($i = 0; $i< sound.length; $i++){ 
    function playsound[$i](){ 
      a[$i].play().fadeIn().loop(); 
     } 
} 

playsound1(); 
+0

什麼是'a'?你的意思是'聲音[$ i]'? –

+1

函數名必須是一個標識符,所以語法根本不起作用。此外,因爲所有這些假設的函數將共享相同的變量'$ i',他們將不會做你需要的。這是Stackoverflow上數千次問題的變體。 – Pointy

回答

1

你會更好,只是路過$我作爲參數傳遞給playsound功能

var sounds = [ 
    new buzz.sound("laser-01", { formats: [ "ogg", "mp3", "acc" ]}), 
    new buzz.sound("alien-noise-01", {formats: [ "ogg", "mp3", "acc" ]}) 
]; 

var playsound = function (i) { 
    sounds[i].play().fadeIn().loop(); 
} 

playsound(1); 

如果你真的想playsound1()風格函數名,你可以EVAL它(雖然我建議針對添加此):

for (var i = 0; i < sounds.length; i++){ 
    eval('var playsound' + (i+1) + ' = function() { playsound(' + i + '); };'); 
} 

playsound1(); 
playsound2(); 
+0

不符合你的想法。 – 0x499602D2

+0

是的,你可以這樣做,它不會工作。 – Pointy

+0

Cheers @max表示複選標記。我想重申,我認爲你應該在下面使用Yanick的答案。這不完全是你想要的,但它是一個更乾淨的解決方案。 –

3

您可以重複使用的功能:

// declare your sound dictionary 
var sounds = { 
    'laser':  new buzz.sound("laser-01", { formats: [ "ogg", "mp3", "acc" ]}), 
    'alien-noise': new buzz.sound("alien-noise-01", {formats: [ "ogg", "mp3", "acc" ]}) 
}; 

// this is the helper function 
var playSoundFn = function() { 
    this.play().fadeIn().loop(); 
}; 

// assign the helper function to all your sounds 
for (var i=0, len=sounds.length; i<len; i++){ 
    sounds[i].playSound = playSoundFn; 
} 


// then play your sounds from any of them in your dictionary : 
sounds['laser'].playSound(); 
sounds['alien-noise'].playSound(); 

** 編輯 **(感謝TheSmose

如果sounds陣列中的每個項目都與buzz.sound.prototype原型創建的,那麼你可以簡單地添加自定義功能,並簡單地使用它:

// this is the helper function 
buzz.sound.prototype.playSound = function() { 
    this.play().fadeIn().loop(); 
}; 

// declare your sound dictionary 
var sounds = { 
    'laser':  new buzz.sound("laser-01", { formats: ["ogg", "mp3", "acc"]}), 
    'alien-noise': new buzz.sound("alien-noise-01", {formats: ["ogg", "mp3", "acc"]}) 
}; 

// then play your sounds from any of them in your dictionary : 
sounds['laser'].playSound(); 
sounds['alien-noise'].playSound(); 
+0

Upvoting this ...這是一個很好的建議,儘管它不是OP要求的。 –

+0

我看着這個問題,這是可以工作的解決方案,而不是爲每個聲音創建一個不同的功能。我可以給他一個解決他的問題,但這是更好的,國際海事組織:) –

+0

更好的是定義你的函數爲'buzz.sound.prototype.playSound = function(){this.play()。fadeIn()。loop (); }'var sounds'聲明之前,不是? –