web前端tips:js继承——借用构造函数继承

news2024/11/24 3:09:25

输入图片描述

上篇文章给大家分享了 js继承中的原型链继承

web前端tips:js继承——原型链继承

在文章末尾,我提到了

原型链的继承,子类需要传递参数给父类的构造函数,就无法通过直接调用父类的构造函数来实现,需要通过中间的过程来传递参数

那这篇文章,也就能解决这个传参问题了。

借用构造函数继承

又叫经典继承,它通过在子类构造函数中调用父类构造函数来继承父类的属性和方法。

借用构造函数继承的核心思想是,在子类构造函数中使用 call()apply() 方法调用父类构造函数,并将子类实例作为参数传递给父类构造函数。这样就能够在子类实例中创建父类的属性,并且每个子类实例都有它们自己的属性副本。

以下是借用构造函数继承的基本步骤:

  1. 定义父类构造函数,设置父类的属性和方法。
  2. 定义子类构造函数,使用 Parent.call(this, ...) 在子类中调用父类构造函数,并传递子类特有的参数。
  3. 在子类构造函数中定义子类的属性和方法。
// 1
function Parent(name) {
  this.name = name
  this.arr = [1,2,3]
}

// 2
function Child(name, age) {
  // 借用父类构造函数
  Parent.call(this, name)
  this.age = age
}

// 实例化
var child = new Child('我是 child', 666)
child.name // 我是 child
child.arr // [1,2,3]
child.age // 666

通过以上步骤,我们就实现了简单的借用构造函数继承,也解决了原型链继承传参问题。

并且由于每个子类实例都有它们自己的属性副本,所以对属性修改是不会互相影响的:

var child1 = new Child('我是 child1', 111)
var child2 = new Child('我是 child2', 222)
child1.arr.push(4)
child1.arr // [1,2,3,4]
child2.arr // [1,2,3]

优点

  • 子类实例具有独立的属性,不会共享父类实例的属性。
  • 子类可以向父类构造函数传递参数。

缺点

  • 无法继承父类原型链上的方法和属性,只能继承父类构造函数中的属性和方法。
function Parent(name) {
  this.arr = [1,2,3]
}
Parent.prototype.getArr = function() {
  return this.arr
}
function Child() {
  // 借用父类构造函数
  Parent.call(this)
}
// 实例化
var child = new Child()
child.getArr() // Uncaught TypeError: child.getArr is not a function
  • 父类的方法无法复用,每个子类实例都会创建一份方法的副本。

需要注意的是,借用构造函数继承只是继承了父类构造函数中的属性和方法,并没有真正实现完全的继承。如果希望子类也能继承父类的原型链上的方法和属性,可以使用其他方式,如组合继承、寄生组合继承等。

结语

牵手 持续为你分享各类知识和软件 ,欢迎访问、关注、讨论 并留下你的小心心❤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/792363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享5款有点冷门的实用派软件

​ 分享5款冷门但值得下载的Windows软件,个个都是实用,你可能一个都没见过,但是 我觉得你用过之后可能就再也离不开了。 系统监控——XMeters ​ XMeters是一个系统监控软件,可以让你在任务栏上显示各种系统信息,如C…

(十九)使用InfluxDB搭建报警系统

以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个PDF找来找去的,太麻烦! 第 19 章 使用InfluxDB搭建报警系统 19.1 什么是监控 1、监控其实每隔一段时间对数据计算一下。比如&#xf…

SAS-数据集添加序号

一、数据集添加序号 方法1:data步生成 方法2:proc sql生成 /** 方法1 **/ data class1; set sashelp.class; seq _N_; /** 添加序号 **/ run; /** 方法2 **/ proc sql;create table class2 as select monotonic() as id, * /** monotonic()添加id **…

航空发动机支架质量检测非接触式全尺寸测量CASAIM 3D扫描仪

发动机是实现飞行的强大“心脏”支撑,发动机支架是飞机这一精密而复杂系统中不可或缺的一部分,它将巨大而沉重的发动机牢固安装在飞机上,使其可以承受各种飞行载荷和各种未知的挑战,因此航空发动机支架的质量检测和尺寸测量至关重要。 使用CASAIM 3D扫描…

【java实习评审】对小说详情模块的服务封装比较到位

大家好,本篇文章分享一下【校招VIP】免费商业项目“推推”第一期书籍详情模块java同学的代码作品。该同学来自成都信息工程大学。本项目亮点难点:1 热门书籍在更新点的访问压力,2 书籍更新通知的及时性和有效性,3 书荒:同好推荐的…

文档翻译软件那么多,哪个能满足你的多语言需求?

想象一下,你手中拿着一份外文文件,上面记录着珍贵的知识和信息,但是语言的障碍让你无法领略其中的内容。而此时,一位翻译大师闪亮登场!他的翻译技巧犹如一把魔法笔,能够将文字的魅力和意境完美传递。无论是…

OpenShift 4 - 为 OpenShift 托管集群配置用户认证(视频)

《OpenShift / RHEL / DevSecOps / Ansible 汇总目录》 说明:本文已经在 OpenShift 4.13 ACM 2.8 AWS 环境中验证 本文是《OpenShift 4 - 用 HyperShift 实现以“托管集群”方式部署运行 OpenShift 集群(视频)》的后续。 文章目录 托管集群…

【vue3】vue3的一般项目结构、成功显示自己的vue3页面

一、vue3的一般项目结构 Vue 3并没有规定特定的项目结构,因此您可以根据项目的需求和个人偏好来组织您的Vue 3项目。以下是一个常见的Vue 3项目结构示例,供参考: your-project/|- public/| |- index.html # 应用程序的入口HTML文件…

项目里程碑有什么作用?设置里程碑时应注意什么?

正如 "里程碑 "一词的原意是表示所走距离的标记,项目中的里程碑也代表着迄今为止已完成的任务或活动。但实际上,里程碑的作用远不止于此。 项目里程碑为何重要? 项目的成功取决于细节。项目里程碑之所以重要,是因为它…

会不会好奇ai绘画生成器?ai创作的灵感从何而来?

在这个宁静的公园里,阳光透过树叶的缝隙洒在的地面上,微风轻拂着艺术家的发丝,带来一丝清凉。坐在长椅上的他,手中紧握着一支触控画笔,目光凝视着眼前的美景。旁边一台智能绘画助手正在悄悄发光,它似乎能够…

99%误报与1%真实告警之间,差一个“威胁情报”

在网络安全领域,平均检测时间(MTTD)与平均响应时间(MTTR)是衡量企业应对威胁事件能力的重要指标。根据 SANS 2019 事件响应的调查,52.6%的企业平均检测时间少于24小时。一旦检测到事件,67%的企业…

陪诊小程序定制|医院陪诊系统源码|陪诊小程序开发

随着人们对健康关注的日益增加,陪诊服务的需求也在不断增长。为了提供便捷、高效的陪诊服务,陪诊小程序应运而生。下面将介绍一些陪诊小程序开发的优势。   便捷的预约与安排   陪诊小程序提供了便捷的预约与安排功能。用户可以通过小程序随时随地进…

【leetcode】leetcode69 x的平方根

文章目录 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。原理牛顿法(数值分析中使用到的):二分法 解决方案java 实现实例执行结果 python 实现实例 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数&…

树、二叉树(C语言版)详解

🍕博客主页:️自信不孤单 🍬文章专栏:数据结构与算法 🍚代码仓库:破浪晓梦 🍭欢迎关注:欢迎大家点赞收藏关注 文章目录 🍊树的概念及结构1. 树的概念2. 树的相关概念3.树…

MySQL5.7 与 MariaDB10.1 审计插件兼容性验证

这是一篇关于发现 MariaDB 审计插件导致 MySQL 发生 crash 后,展开适配验证并进行故障处理的文章。 作者:官永强 爱可生DBA 团队成员,擅长 MySQL 运维方面的技能。热爱学习新知识,亦是个爱打游戏的宅男。 本文来源:原创…

20.1K Star!Notion的开源替代方案:AFFiNE

Notion这款笔记软件相信很多开发者都比较熟悉了,很多读者,包括我自己都用它来记录和管理自己的笔记。今天给大家推荐一个最近比较火的开源替代方案:AFFiNE。目前该开源项目已经斩获20.1K Star,热度非常的高,下面一起来…

Unhandled Exception: User denied permissions to access the device‘s location.

在写android app时&#xff0c;有的时候遇到这样的错误&#xff1a;未处理的异常:用户拒绝访问设备位置的权限。 即使加上了官网讲述的&#xff1a;下面两行代码任意一行&#xff0c;也不行。 <uses-permission android:name"android.permission.ACCESS_FINE_LOCATIO…

Java的第十四篇文章——文件和IO流

目录 学习目标 1. FIle类 1.1 File类的构造方法 1.2 FIle类的创建方法 1.3 File类的删除方法 1.4 File类的判断方法 1.4.1 绝对路径和相对路径 1.5 File类的获取的方法 1.6 File类的方法listFIles() 2. IO流对象 2.1 IO流对象的分类 2.1.1 按照操作的文件类型分类 …

【简单认识MySQL的MHA高可用配置】

文章目录 一、简介1、概述2、MHA 的组成3&#xff0e;MHA 的特点4、MHA工作原理 二、搭建MHA高可用数据库群集1.主从复制2.MHA配置 三、故障模拟四、故障修复步骤&#xff1a; 一、简介 1、概述 MHA&#xff08;Master High Availability&#xff09;是一套优秀的MySQL高可用…

Java网络编程基础概念

一、网络编程入门 1.1、软件结构 c/s结构&#xff1a;指客户端和服务器结构。如下图 B/S结构&#xff1a;指浏览器和服务器结构。如下图 共同点&#xff1a;无论哪一种架构&#xff0c;都离不开网络的支持。因此就设计到网络编程&#xff08;在一定的协议下&#xff0c;实…