热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何正确地从Node.js中的EventEmitter继承

本文介绍了如何在Node.js中正确地从EventEmitter继承,并避免常见的陷阱。

在Node.js中,第三个示例通常 是正确的做法:EventEmitter所有 实例创建一个共享的事件实例。

让我们通过一个简单的例子来理解这个问题:

var Foo = function() {
// 每个 Foo 实例都有一个唯一的 id
this.id = Math.random();
}
Foo.prototype.doFoo = function() { console.log('Foo!'); }

假设我们想要创建一个 Bar 构造函数,该构造函数继承自 Foo 并添加一些新属性。如果按照最后一个示例的做法:

var Bar = function() {
this.something = 5;
}
Bar.prototype = new Foo();

这是错误的,因为所有 Bar 实例将具有相同的 id 属性。为了确保每个实例都有唯一的 id,我们需要在每个实例化过程中调用父构造函数:

var Bar = function() {
Foo.call(this); // 在当前实例上设置唯一的 `id`
this.something = 5;
}
Bar.prototype = Object.create(Foo.prototype);

请注意,这里的最后一行与 Bar.prototype.__proto__ = Foo.prototype; 相同,因为 Object.create 创建了一个新对象,其 __proto__ 被设置为 Object.create 的参数。

通过这种方式,我们可以确保每个 Bar 实例都正确地继承了 Foo 的属性和方法,并且每个实例都有唯一的 id


推荐阅读
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 八段代码完全控制Promise
    1.Promise的马上实行性varpnewPromise(function(resolve,reject){console.log(createapromise);resolve ... [详细]
  • 文章目录前言Program(程序)Identifier(标识符)Literal(字面量)Vari ... [详细]
  • 作为一名Ruby初学者,我对Comparable和Enumerable Mixin的用途感到困惑。本文旨在通过实例详细解释这两个Mixin的功能及其在实际编程中的应用。 ... [详细]
  • JavaScript 函数详解
    本文详细介绍了 JavaScript 中函数的基本概念和高级用法,包括函数的声明、参数传递、返回值、函数提升、函数表达式、IIFE 即时调用函数表达式以及函数作用域等内容。 ... [详细]
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • 本文详细介绍了 JavaScript 中面向对象编程的基本概念,包括对象的创建、工厂模式、构造函数、原型及其优缺点,并探讨了继承的多种实现方式。 ... [详细]
  • 本文详细记录了腾讯ABS云平台的一次前端开发岗位面试经历,包括面试过程中遇到的JavaScript相关问题、Vue.js等框架的深入探讨以及算法挑战等内容。 ... [详细]
  • pypy 真的能让 Python 比 C 还快么?
    作者:肖恩顿来源:游戏不存在最近“pypy为什么能让python比c还快”刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。正式开始之前,多唠叨两句 ... [详细]
  • 本文详细介绍了TypeScript中的各种数据类型,包括基本类型、数组、元组、枚举、any、void、never以及类型断言,并提供了示例代码及其编译结果。 ... [详细]
  • Java 基础:抽象类与接口详解
    本文详细介绍了 Java 中的抽象类和接口的概念、声明方式及其主要区别。包括抽象方法的声明、抽象类的特性、接口的实现规则等。 ... [详细]
  • 用示例链接 Java 中的 hashset ... [详细]
  • 本文介绍了如何通过 AJAX 发送请求到后端控制器,并将返回的 JSON 数据解析后在前端页面上显示。具体步骤包括发送 AJAX 请求、解析 JSON 字符串和遍历数据。 ... [详细]
  • C#本随笔为个人复习巩固知识用,多从书上总结与python基础教程理解归纳得来,如有错误烦请指正面向对象的三大基本特征:封装、继承、多态 ... [详细]
  • iOS 百度地图使用指南:基本定位与地理编码
    本文详细介绍如何在 iOS 应用中集成百度地图,实现基本的地图定位和地理编码功能。配置详情请参考官方文档:http://developer.baidu.com/map/index.php?title=iossdk ... [详细]
author-avatar
婷518婷_239
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有