我在很多 node 上都看到了这种模式.js库:

Master.prototype.__proto__ = EventEmitter.prototype;

(来源here)

有人能给我举个例子解释一下,为什么这是一个如此常见的模式,什么时候方便?

推荐答案

正如上面代码的注释所说,它将使MasterEventEmitter.prototype继承,因此您可以使用该"类"的实例来发出和侦听事件.

例如,你现在可以做:

masterInstance = new Master();

masterInstance.on('an_event', function () {
  console.log('an event has happened');
});

// trigger the event
masterInstance.emit('an_event');

Update:正如许多用户指出的,在Node中实现这一点的"标准"方法是使用"util".继承人:

var EventEmitter = require('events').EventEmitter;
util.inherits(Master, EventEmitter);

2nd Update:随着ES6课程的到来,我们建议现在扩展EventEmitter个课程:

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();

myEmitter.on('event', () => {
  console.log('an event occurred!');
});

myEmitter.emit('event');

https://nodejs.org/api/events.html#events_events

Node.js相关问答推荐

GitLab SAST中的Nodejcan未找到匹配项

填充函数在Node.js和MongoDB中不起作用

使用AWS SDK for JavaScript V3将图像从node.js上传到s3 bucket

Rails 7导入npm yaml包时出现404错误

当API返回400状态代码时,使用Reactjs fetch获取错误消息

2023年如何在Node.js中使用Gmail发送邮箱?

有没有办法判断 UUID 是否是使用 node.js 中的特定命名空间生成的?

错误:无法为 /blog 收集页面数据并且在 object.fetch 处获取失败

访问 Mongoose 查询之外的变量

tsc:当我上传 React+next js 和 node 项目时,在 heroku 找不到

try 运行迁移时的 Typeorm:缺少必需的参数:dataSource

为什么我在生产环境中 deproy Next.js 示例项目时 CSS 不起作用?

使用中的端口代码:'EADDRINUSE',即使在 kill 命令之后

Node.js 变量声明和范围

如何在 Joi 字符串验证中使用枚举值

Node.JS 中的基本 HTTP 身份验证?

有人在 NodeJS 中实现过 wiki 吗?

如何在 NodeJS 中拆分和修改字符串?

yarn 和 npm 的主要区别是什么?

promise 回调返回promise