node 手动实现 EventEmitter 特别简单的思路

简介: node 手动实现 EventEmitter 特别简单的思路
class MyEvent {
    constructor() {
        // 事件的数组
        this.funcArray = [];
    }
    /**
     * 绑定事件
     * @param funcName 事件名称
     * @param cb 回调函数
     */
    on(funcName, cb) {
        this.funcArray.push({[funcName]: cb, funcName: funcName, once: false});
    }
    /**
     * 触发方法
     * @param funcName 方法明
     * @param args 参数
     */
    emit(funcName, ...args) {
        this.funcArray.forEach((item, index) => {
            if (funcName === item.funcName) {
                // 执行方法
                item[funcName](...args)
                if (item.once) this.funcArray.splice(index, 1)
            }
        })
    }
    /**
     * 绑定一次性执行的参数
     * @param funcName 事件名称
     * @param cb 回调函数
     */
    once(funcName, cb) {
        this.funcArray.push({[funcName]: cb, funcName: funcName, once: true})
    }
    /**
     * 移除事件
     * @param funcName 事件名称
     */
    off(funcName){
      let index =  this.funcArray.findIndex(item => item.funcName === funcName);
      this.funcArray.splice(index, 1);
    }
}
const myEvent = new MyEvent();
myEvent.on('abacd', (a, b) => {
    console.log('abacd', a, b)
})
myEvent.once('once13',(a, b)=>{
    console.log('once13 只会执行一次', a, b)
})
myEvent.emit('abacd', 123, 424)
myEvent.off('abacd');
myEvent.emit('abacd', 123, 424)
myEvent.emit('once13', 123, 424)
myEvent.emit('once13', 123, 424)


结果:


20201208102615804.png

相关文章
|
9月前
|
JavaScript 前端开发
Node.js中的EventEmitter模块:基本概念、使用方法和常见应用场景
Node.js中的EventEmitter模块:基本概念、使用方法和常见应用场景
167 0
|
4月前
|
JavaScript 前端开发 索引
Node.js EventEmitter
10月更文挑战第3天
30 0
|
8月前
|
JavaScript 前端开发 索引
Node.js EventEmitter
Node.js EventEmitter
43 1
|
JavaScript 前端开发 应用服务中间件
实战Node.js原理对于阻塞和EventEmitter及其继承的运用心得
实战Node.js原理对于阻塞和EventEmitter及其继承的运用心得
实战Node.js原理对于阻塞和EventEmitter及其继承的运用心得
|
JSON 缓存 JavaScript
Node.js EventEmitter 和 Buffer
Node.js EventEmitter 和 Buffer
|
JSON JavaScript 数据格式
Node.js躬行记(1)——Buffer、流和EventEmitter
  Buffer是一种Node的内置类型,不需要通过require()函数额外引入。它能读取和写入二进制数据,常用于解析网络数据流、文件等。
|
JavaScript
Node.js EventEmitter
Node.js EventEmitter Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。 Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在每次有新连接时触发一个事件, 一个 fs.readStream 对象会在文件被打开的时候触发一个事件。
1349 0
node 之EventEmitter实现
node 根据事件驱动,那基本都是回调,最常用的叫发布订阅模式,什么叫发布订阅呢?对比观察者模式,前者是主动地,后者是被动的
1514 0

热门文章

最新文章