要求能实现的调用方法如下: 1. const emitter = new Emitter(); 2. const sub1 = emitter.subscribe('click', (...args) => console.log(args)); 3. const sub2 = emitter.subscribe('click', (...args) => console.log(args)); 4. emitter.emit('click', '1', '2') 5. sub1.release() 以下是上述解答: function Emitter(){ var subs = {}; this.prototype.subscribe = function(type, listener){ if(!subs[type]){ subs[type]=[]; } subs[type].push(new Sub(type, listener)); } this.prototype.emit = function(type){ subs[type].forEach(function(item){ item.exec([...arguments].slice(1)); }); } function Sub(type, listener){ this.type = type; this.listener = listener; this.prototype.release = function(){ subs[this.type] = subs[this.type].filter(function(item){ return item !== this; }); } this.prototype.exec = function(args){ this.listener.apply(this, args); } } }
写一个Emitter Class,需要完成事件的注册,监听及释放
最新推荐文章于 2024-08-03 13:01:55 发布