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方法循环调用
但是我就感觉实现的方式不够优
希望各位不吝赐教
面对疾风吧2016-11-08 15:53:16
var components = function(){ var cache = {};return { set: function(type, handler){ cache[type] = cache[type] || []; cache[type].push(handler); }, get: function(type){ return [].concat(cache[type] || [], cache["*"] || []); }}
}思路非常正确,我的组件就是这么写的,需要执行时用get获取然后循环执行