JavaScript里实现继承的几种方式

news/2024/11/29 4:38:25/

JavaScript 中的继承可以通过以下几种方式来实现:

1、原型链继承:通过将子类的原型对象指向父类的实例来实现继承。这种方式的优点是实现简单,缺点是父类的私有属性和方法子类是不能访问的。

function Parent() {this.name = 'parent';this.age = 30;
}
Parent.prototype.sayName = function() {console.log(this.name);
}function Child() {Parent.call(this);
}
Child.prototype = new Parent();
Child.prototype.constructor = Child;

 2、借用构造函数继承:通过在子类的构造函数中调用父类的构造函数来实现继承。这种方式的优点是子类可以访问父类的私有属性和方法,缺点是每个子类实例都会有一份父类实例的拷贝。

function Parent() {this.name = 'parent';this.age = 30;
}
Parent.prototype.sayName = function() {console.log(this.name);
}function Child() {Parent.call(this);
}

 3、组合继承:通过结合原型链继承和借用构造函数继承的优点来实现继承。这种方式的优点是既可以访问父类的私有属性和方法,又可以避免每个子类实例都有一份父类实例的拷贝。

function Parent() {this.name = 'parent';this.age = 30;
}
Parent.prototype.sayName = function() {console.log(this.name);
}function Child() {Parent.call(this);
}
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;

 4、ES6 Class继承:通过使用ES6 class语法来实现继承。

class Parent {constructor() {this.name = 'parent';this.age = 30;}sayName() {console.log(this.name);}
}class Child extends Parent {constructor() {super();}
}

 

JavaScript 中的继承可以通过多种方式来实现,如原型链继承、借用构造函数继承、组合继承、ES6 Class继承等。每种方式都有各自的优缺点,需要根据具体需求来选择使用。

另外,对于JavaScript中的继承,还有一些需要注意的点:

  • 在原型链继承和组合继承中,子类的原型对象会继承父类的原型对象,这意味着子类和父类共享同一个原型对象,如果父类原型对象上的属性和方法发生改变,子类也会受到影响。
  • 在借用构造函数继承和组合继承中,子类的实例会有一份父类实例的拷贝,这意味着每个子类实例都有自己的父类实例,不会受到其他实例的影响。
  • 在ES6 Class继承中,父类的静态方法和属性会被继承到子类,子类的实例也会继承父类的实例方法和属性。

选择合适的继承方式和组合使用,可以帮助我们更好的组织代码,提高代码的可维护性。


http://www.ppmy.cn/news/48736.html

相关文章

[算法总结] 关于字符串类型题你应该知道这些?精心汇总!!

😚一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘 🤗专栏:算法学习 &am…

OpenAI最新官方ChatGPT聊天插件接口《插件使用策略》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(七)(附源码)

Usage policies 使用策略 Introduction 导言Disallowed usage of our models 禁止使用我们的模型 Platform policy 平台策略Plugin policies 插件策略Changelog 更新日志其它资料下载 此插件使用策略 Updated 更新于 March 23,2023 2023年3月23日 Introduction 导言 We’ve r…

Onnx 转Ncnn

Onnx 转Ncnn 算法工程师给了onnx,需要转成ncnn才能用到安卓上去,步骤如下 简化onnx 算法给了.onnx后缀的文件,100多兆,太大,第一步,先简化: conda env list 查看conda环境(前提是之前已经配…

学科类型-英文

标题 前言必学场景词汇及用法数学数字运算数学几何历史物理化学美术音乐语言学天文学生物学植物学生态学社会学情境常用单词数学数字运算数学几何周长历史物理化学二氧化碳美术音乐语言学天文学生物学植物学生态学

Win10系统下VS2019编译Qt的Ribbon控件 -- SARibbon

Win10系统下VS2019编译Qt的Ribbon控件 -- SARibbon 一、源码下载二、源码编译三、封装成库四、Qt配库五、运行测试 原文链接:https://blog.csdn.net/m0_51204289/article/details/126431338 一、源码下载 【1】https://gitee.com/czyt1988/SARibbon/tree/master/s…

RK35XX系列(RK3568) GT911触摸屏调试记录 添加xy镜像调换

SOC:RK3568 system:Android12 kernel:kernel-4.19 RK驱动本身就适配好TP的代码 chenjx@DESKTOP-HU3S291:~/RKAndroid12/kernel-4.19$ ls drivers/input/touchscreen/gt9xx gt9xx/ gt9xx_qcom/ gt9xx_rk/确认Makefile用的是哪一份 obj-$(CONFIG_TOUCHSCREEN_GT9XX) …

linux_信号-终端按键信号-硬件异常信号-kill函数-raise函数-abort函数

接上一篇:linux_信号概念、事件、状态、常见信号解释、信号屏蔽字、未决信号集 本次来继续分享信号的相关知识点,主要是一些常产生的信号介绍,以及怎么通过代码来发送信号杀死进程,主要是kill函数、raise函数、abort函数的调用&a…

【Mysql 学习笔记】

Mysql 笔记记录 MySQL学习笔记一、 DDL1. DDL 查询和创建数据库2. DDL 修改、删除、使用数据库3. DDL 查询数据表4. DDL 创建数据表5. DDL 修改数据表6. DDL 删除数据表 二、DML MySQL学习笔记 一、 DDL 1. DDL 查询和创建数据库 #查询所有数据库 SHOW DATABASES; #查询某个数…