Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何减少重复的javascript代码_Javascript_Repeat - Fatal编程技术网

如何减少重复的javascript代码

如何减少重复的javascript代码,javascript,repeat,Javascript,Repeat,我是否可以减少下面的重复?我只展示了两个代码块,但是有很多相同的代码块,将来还会有更多相同的代码块 我尝试过使用数组和循环,但不幸的是,我无法得到一个有效的示例。先谢谢你 E1 = new Audio('audio/E1.ogg'); E1.addEventListener('ended', function() { this.currentTime = 0; this.play(); }, false); A1 = new Audio('audio/A1.ogg'); A1.addE

我是否可以减少下面的重复?我只展示了两个代码块,但是有很多相同的代码块,将来还会有更多相同的代码块

我尝试过使用数组和循环,但不幸的是,我无法得到一个有效的示例。先谢谢你

E1 = new Audio('audio/E1.ogg');
E1.addEventListener('ended', function() {
  this.currentTime = 0;
  this.play();
}, false);

A1 = new Audio('audio/A1.ogg');
A1.addEventListener('ended', function() {
  this.currentTime = 0;
  this.play();
}, false);
编辑:使用下面乔纳森的代码,我仍然想知道是否有可能执行以下等效操作:

(E1,A1,x,x,x).addEventListener('ended', callback, false);
// I know this bit of code doesn't work

由于回调是相同的,因此可以将它们绑定到一个变量:

var E1 = new Audio('audio/E1.ogg');
var A1 = new Audio('audio/A1.ogg');

var callback = function() {
    this.currentTime = 0;
    this.play();
};

E1.addEventListener('ended', callback, false);
A1.addEventListener('ended', callback, false);
差不多

var addEndedEvent = function(elem) {
    elem.addEventListener('ended', function() {
        this.currentTime = 0;
        this.play();
    }, false);
}

addEndedEvent(new Audio('audio/A1.ogg'));
var文件=['audio/E1.ogg','audio/A1.ogg'];
//请注意,我们不能/不应该使用for(…in…)-这不会达到您的期望
对于(变量i=0;i
您应该能够执行类似的操作。如果您有更多文件,只需将它们的名称添加到数组
fileNames

var audioRefs = { }, fileNames = ['E1','A1','B1'], i, file;
for( i = 0; i < fileNames.length; i++ ) {
    file = fileNames[i];
    audioRefs[file] = new Audio('audio/' + file + '.ogg');
    audioRefs[file].addEventListener('ended', callback, false);
}

function callback() {
   this.currentTime = 0;
   this.play();
};

对于已编辑的问题,如果使用中的每个功能,可以执行以下操作:

_.each([E1,A1,B1], function(audio) { 
    audio.addEventListener('ended', callback, false); 
});

我不敢相信我没有发现创建了回调变量。我想我一定是因为盯着其他代码看而被代码盲了!您应该在问题中保留原始代码。事实上,这个被接受的答案令人困惑,因为它看起来和你在问题中已经得到的完全一样。@davy8:我不知道为什么我从来没有看到过这个评论,但它肯定是有意义的。我已将问题回滚并重新编辑,以便未来的寻求答案者能够轻松看到解决方案解决了什么问题。
audioRefs = {
   'A1': (reference to A1 Audio object),
   'B1': (reference to B1 Audio Object)
}
_.each([E1,A1,B1], function(audio) { 
    audio.addEventListener('ended', callback, false); 
});