JavaScript 如何重复绑定问题?

var audio = new Audio();

audio.onended = function(e){    console.log('end 1');
}

audio.onended = function(e){    console.log('end 2');
}

上面代码很只会输出end 2,要怎么才能做到能输出end 1 和 end 2?

我自己想了一种方法

bind(handler, cb){
    !m && (m = []);
    !m[handler] && (m[handler] = []);
    m[handler].push(cb);
}
    
bind('ended', function(e){    console.log('1');
});

bind('ended', function(e){    console.log('2');
});var audio = new Audio();
audio.onended = (e) => {    for (var k in m['ended']){
        m['ended'][k](e);
    }
}

大概就是这样,用数组保存,然后audio方法循环调用
但是我就感觉实现的方式不够优
希望各位不吝赐教


蓝山帝景
浏览 515回答 1
1回答

qq_遁去的一_1

你的做法是正确的,但是如果把 bind 封装起来,再把下面的 for 封装成一个 trigger 函数就更好了。不过话说回来,Audio 是一个 HTMLDom 对象,本身应该提供了 addEventListener() 方法,可以用这个方法添加任意个处理函数。如果你使用 jQuery,通过 jQuery 封装之后调用 on() 也可以绑定多个处理函数,比如$(audio)     .on("ended", function() {        console.log(1);     })     .on("ended", function() {        console.log(2);     });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript