iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >浅谈nodejs中的类定义和继承的套路
  • 245
分享到

浅谈nodejs中的类定义和继承的套路

套路浅谈定义 2022-06-04 17:06:16 245人浏览 独家记忆
摘要

javascript是一门极其灵活的语言。 灵活到你无法忍受! 我个人喜欢强类型的语言,例如C/C++,C#等。 但是js代表着未来,所以需要学习。 js中类定义以及继承有n多种方式,现在来学习一下n

javascript是一门极其灵活的语言。

灵活到你无法忍受!

我个人喜欢强类型的语言,例如C/C++C#等。

但是js代表着未来,所以需要学习

js中类定义以及继承有n多种方式,现在来学习一下nodejs类定义以及继承的固定套路。

套路1. 在构造函数(constructor)中总是使用instanceof操作符:


function Base() {
  if (!(this instanceof Base)) {
    return new Base();
  }
}

上述代码的含义就是: 如果Base这个函数调用时没有使用new操作符,则会自动调用new操作符,返回Base的实例

套路2. 所有成员变量定义在构造函数(constructor)中


function Base() {
  if (!(this instanceof Base)) {
    return new Base();
  }

  //开始成员变量定义
  this.className = "Base";
}

套路3. 所有的成员方法以函数表达式方式定义在原型(prototype)中【为什么要这样,其原因在套路4中的inherits源码注释中】


Base.prototype.printClassName = function(){
   console.log(this.className);
}

调用如下:


var base = Base(); //不使用new操作符,直接进行函数调用,自动调用new操作符
console.log(base.className);
base.printClassName();

套路4. 使用util.inherits(子类,父类)进行原型(prototype)继承

先来看一下inherits的源码:


var inherits = function(ctor, superCtor) {
  //严格相等测试:undefined/null
  //子类构造函数必须存在
  if (ctor === undefined || ctor === null)
    throw new TypeError('The constructor to "inherits" must not be ' +
      'null or undefined');
  //严格相等测试:undefined/null
  //父类构造函数必须存在
  if (superCtor === undefined || superCtor === null)
    throw new TypeError('The super constructor to "inherits" must not ' +
      'be null or undefined');

  //要点: 如果要继承的话,父类必须要有prototype对象
  //这也是为什么将所有成员方法都定义在prototype对象中!!!
  if (superCtor.prototype === undefined)
    throw new TypeError('The super constructor to "inherits" must ' +
      'have a prototype');

  //让子类构造函数对象增加一个super_指针,指向父类,这样就形成继承链
  ctor.super_ = superCtor;

  //调用Object.setPrototypeOf(子类的prototype,父类的prototype)
  Object.setPrototypeOf(ctor.prototype, superCtor.prototype);
};

Object.setPrototypeOf : 该链接可以了解一下setPrototypeOf方法,非常简单,其Polyfill如下:


// 仅适用于Chrome和FireFox,在IE中不工作:
Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) {
 obj.__proto__ = proto;
 return obj; 
}

我们来测试一下继承。

先定义子类


function Child() {
  //老样子,套路1
  if (!(this instanceof Child)) {
    return new Child();
  }
}

然后根据套路4, 调用inherits函数进行原型继承


//注意,inherits调用不在构造函数,也不在原型对象,而是全局调用
inherits(Child, Base);

最后我们调用一下child的printClassName方法,该方法在基类原型对象中实现。

查看图片

子类调用基类函数-undefined.png

出现错误,child.printClassName()后输出undefined!

为什么呢?

套路5. 子类的构造函数中使用 父类.call(this),实现父类构造函数中的成员变量继承


function Child() {
  //老样子,套路1
  if (!(this instanceof Child)) {
    return new Child();
  }

  //增加这句话,在调用printClassName就能正常的输出Base字符串
  Base.call(this);

  //如果要更新基类的成员变量,请在Base.call(this)之后!
  this._className = "Child"; //调用printClassName就能正常的输出Child字符串
}

Function.prototype.call()

由此可见,nodejs中的继承需要:

在构造函数中调用 父类.call(this),实现父类成员变量的继承

全局调用inherits(子类,父类) 进行父类成员函数的继承

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 浅谈nodejs中的类定义和继承的套路

本文链接: https://www.lsjlt.com/news/12454.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • nodejs中怎么定义和继承类
    nodejs中怎么定义和继承类,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。套路1. 在构造函数(constructor)中总是使用ins...
    99+
    2024-04-02
  • 浅谈Python类的单继承相关知识
    目录一、类的继承二、继承的定义、查看继承的特殊属性和方法三、继承中的访问控制四、方法的重写、覆盖override五、继承中的初始化上文我们总结过了Python多继承的相关知识,没看过...
    99+
    2024-04-02
  • python类的继承怎么定义
    这篇文章主要介绍“python类的继承怎么定义”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python类的继承怎么定义”文章能帮助大家解决问题。说明基于一个现有的类来获得它所有的能力,并以此来扩展...
    99+
    2023-06-30
  • 怎么在python中定义类的继承
    怎么在python中定义类的继承?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Pytho...
    99+
    2023-06-14
  • C++中继承的概念和定义
    目录1.继承的概念及定义1.1继承的概念1.2继承的定义格式1.3继承基类成员访问方式的变化(1)公有继承(2)保护继承(3)私有继承1.4总结2.基类和派生类对象赋值转换3.继承中...
    99+
    2024-04-02
  • 浅谈Spring 中 @EnableXXX 注解的套路
    目录前言设计目标@EnableScheduling (导入一个 @Configuration 类)@EnableTransactionManagement(导入一个 ImportSe...
    99+
    2024-04-02
  • Python自定义类继承threading.Thread的方法
    本篇内容介绍了“Python自定义类继承threading.Thread的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明使用thre...
    99+
    2023-06-30
  • 深入浅析kotlin中的继承与类
    深入浅析kotlin中的继承与类?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。kotlin基础教程之类和继承类声明使用class关键字声明类,查看其声明格式:: modifie...
    99+
    2023-05-31
    kotlin 继承
  • Python类中的单继承和多继承用法
    本篇内容主要讲解“Python类中的单继承和多继承用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python类中的单继承和多继承用法”吧!前言Python面向对象编程语言,有List、Str...
    99+
    2023-06-02
  • 浅谈Java继承中的转型及其内存分配
    看书的时候被一段代码能凌乱啦,代码是这样的:package 继承;abstract class People { public String tag = "疯狂Java讲义"; //① public String na...
    99+
    2023-05-30
    java 继承 内存
  • 浅谈JS和Nodejs中的事件驱动
    目录事件驱动和发布-订阅事件驱动是怎样用在浏览器中的JavaScript的?浏览器中的主题和观察者事件驱动如何用于 Node.js?了解 EventEmitterJavaScript...
    99+
    2024-04-02
  • 浅谈java自定义中类两个对象的比较
    目录 实现比较两个对象是否相同 1.前置代码 1.学生类 2.示例  3.输出  4.原因 2.那么我们要怎么做呢 1.对Student类中重新实现quals方法(即对equals方法重写)  2.完整代码如下: 3.具体操作 4.演示 ...
    99+
    2023-09-20
    java 开发语言 学习 学习方法 程序人生 intellij-idea
  • Python类的定义继承调用方法有哪些
    这篇文章主要讲解了“Python类的定义继承调用方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python类的定义继承调用方法有哪些”吧!一、类的约束# _开头:&nbs...
    99+
    2023-07-02
  • Java中的接口与继承怎么定义
    这篇文章主要讲解了“Java中的接口与继承怎么定义”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中的接口与继承怎么定义”吧!假设我有很多个类,分别是Mysql.java、SQLSer...
    99+
    2023-06-17
  • Python类的定义继承调用比较方法技巧
    目录一、类的约束二、类的定义2.1、创建创建2.1.1、类的导入2.1.2、构造器2.1.3、类属性三、类的继承3.1、单继承3.2、多继承3.3、调用父类方法3.4、属性扩展3.4...
    99+
    2024-04-02
  • JavaScript 继承的启示:从类和继承中汲取宝贵的教训
    ...
    99+
    2024-04-02
  • 浅谈Spring AOP中args()和argNames的含义
    args()的作用主要有两点: 1、切入点表达式部分如果增加了args()部分,那么目标方法除了要满足execution部分,还要满足args()对方法参数的要求,对于符合execu...
    99+
    2024-04-02
  • 浅谈让@Value更方便的Spring自定义转换类
    目录一、万能的字符串二、自定义转换类三、总结一、万能的字符串 当然,任何时候都可以使用字符串作为属性的值,从配置文件里读取出来,如下: 配置文件内容为: pkslow.admin=...
    99+
    2024-04-02
  • TypeScript 学习笔记之 typeScript类定义,类的继承,类成员修饰符
    目录1、类的定义2、类的继承3、修饰符前言: typeScript 中的类与 ES6 中的类非常相似,如果不知道 ES6 中的类,建议先学习下 ES6 中的 class 。本篇文章重...
    99+
    2024-04-02
  • 深入浅析java中的继承关系类的加载顺序
    这篇文章将为大家详细讲解有关深入浅析java中的继承关系类的加载顺序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。详解java中继承关系类加载顺序问题实例代码:public class So...
    99+
    2023-05-31
    java 继承关系类 ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作