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

输入图片描述

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

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

在文章末尾,我提到了

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

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

借用构造函数继承

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

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

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

  1. 定义父类构造函数,设置父类的属性和方法。
  2. 定义子类构造函数,使用 Parent.call(this, ...) 在子类中调用父类构造函数,并传递子类特有的参数。
  3. 在子类构造函数中定义子类的属性和方法。
// 1
function Parent(name) {this.name = namethis.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.mzph.cn/news/8903.shtml

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

相关文章

AutoSAR系列讲解(实践篇)7.6-实验:配置SWCRTE(下)

阅读建议: 实验篇是重点,有条件的同学最好跟着做一遍,然后回头对照着AutoSAR系列讲解(实践篇)7.5-OS原理进阶_ManGo CHEN的博客-CSDN博客理解其配置的目的和意义。本篇是接着AutoSAR系列讲解(实践篇)7.4-实验:配置SWC&RTE_ManGo CHEN的博客-CSDN博客的实验篇接着做…

Protobuf数据交互实战

"no one gonna make me down" 在之前呢,我们介绍了什么protobuf以及它的语法、数据类型。 一句老话说得好,"多说不练,假把式!"。因此,本篇会选择以protobuf的语法,完成一个简易的通讯…

Godot 4 源码分析 - 获取脚本

获取属性列表 今天搂草打兔&#xff0c;取得了脚本内容 因为已能取得属性值&#xff0c;那就再进一步&#xff0c;取得属性名列表 if (SameText(drGet.propertyName, "propertyNames", DRGRAPH_FLAG_CASESENSITIVE)) {List<PropertyInfo> *p_list new List…

html之input复选框变为圆形、自定义复选框、消除默认样式、去除默认样式、事件代理、事件委托

文章目录 htmlcssJavaScript注意outline html <div class"checkbox_bx" onclick"checkboxF()"><input class"checkbox" type"checkbox" value"1" name"boole" onclick"checkboxF()" /><…

工信部、国家标准委联合印发《国家车联网产业指南(2023 版)》

国家工信部和标委发布了最新的《国家车联网产业标准体系建设指南&#xff08;智能网联汽车&#xff09;&#xff08;2023 版&#xff09;》&#xff0c;了解这篇文章&#xff0c;不论您是智能网联汽车的追随者&#xff0c;还是对智能网联汽车产业前景感兴趣的人&#xff0c;都非…

性能测试请求重试实现思路

文章目录 一、背景二、尝试的解决方案三、解决方案1&#xff1a;jmeter retrier插件&#xff01;有点用但是不是特别有用-_-||四&#xff0c;最终解决方案&#xff1a;lucust! 一、背景 最近系统需要压测一些活动&#xff0c;场景是新建抽奖活动之后&#xff0c;每隔2s查询1次…

Spring6——入门

文章目录 入门环境要求构建模块程序开发引入依赖创建java类创建配置文件创建测试类运行测试程序 程序分析启用Log4j2日志框架Log4j2日志概述引入Log4j2依赖加入日志配置文件测试使用日志 入门 环境要求 JDK&#xff1a;Java17&#xff08;Spring6要求JDK最低版本是Java17&…

Linux - find指令详细解释

来自chatgpt find 是一个强大的 Linux 命令行工具&#xff0c;用于在指定路径下查找文件和目录。它支持基于多种条件进行搜索&#xff0c;例如文件名、大小、类型、时间以及其他属性。 基本用法&#xff1a; find <path>&#xff1a;指定要搜索的起始路径&#xff08;默认…

【Shell】Shell编程之免交互

免交互&#xff1a;不需要人为控制就可以完成的自动化操作 自动化运维 Shell脚本和免交互是一个概念&#xff0c;但是两种写法 here document 使用i/o重定向的方式将命令的列表提供给交互式的程序或者命令 是一种标准输入&#xff0c;只能接受正确的指令或命令&#x…

1-Linux的目录结构

Linux的目录结构是规定好的&#xff0c;不可以随意进行更改&#xff01; Linux的文件系统是采用级层式的树状目录结构&#xff0c;最上层是根目录–/&#xff0c;然后再在根目录下创建其它的目录。 各个目录中主要负责的功能和作用如下&#xff1a;&#xff08;主体的结构一定…

引入第三方字体库 第三方字体库Google Fonts

googlefonts官方网站 googlefonts中国网站 本人是在微信小程序中引入 在static中建一个文件夹font-family 例如字体链接&#xff1a;https://fonts.font.im/css?familyKirangHaerang 将该链接的返回的资源的复制到css文件中 font-family.css /* [0] */ font-face {font-fam…

通过cups接口,以代码形式设置默认打印机

1. 完整代码 #include "cups.h" #include <errno.h> #include <iostream>#define HTTP_MAX_URI 1024/** validate_name() - Make sure the printer name only contains valid chars.*/static int /* O - 0 if name is no good, 1 …

使用JMeter进行接口测试教程

安装 使用JMeter的前提需要安装JDK&#xff0c;需要JDK1.7以上版本目前在用的是JMeter5.2版本&#xff0c;大家可自行下载解压使用 运行 进入解压路径如E: \apache-jmeter-5.2\bin&#xff0c;双击jmeter.bat启动运行 启动后默认为英文版本&#xff0c;可通过Options – Ch…

专项练习-04编程语言-03JAVA-04

1. 设Tree为已定义的类名&#xff0c;下列语句能正确创建 Tree 对象的是 。A Tree tnew Tree; B Tree tnew Tree(); C Tree tTree(); D Tree t[ ]new Tree[10]; 正确答案&#xff1a;B 官方解析&#xff1a;暂无官方题目解析&#xff0c;去讨论区看看吧&#xff01; 知识点&…

使用node内置test runner,和 Jest say 拜拜

参考 https://nodejs.org/dist/latest-v20.x/docs/api/test.html#test-runner 在之前&#xff0c;我们写单元测试&#xff0c;必须安装第三方依赖包&#xff0c;而从node 20.0.0 版本之后&#xff0c;可以告别繁琐的第三方依赖包啦&#xff0c;可直接使用node的内置test runner…

centos中修改防火墙端口开放配置

1、直接进入文件修改 vim /etc/sysconfig/iptables 2、添加需要开放的端口 &#xff08;1&#xff09;添加需要开放的单个端口 4001 -A INPUT -m state --state NEW -m tcp -p tcp --dport 4001 -j ACCEPT &#xff08;2&#xff09;添加需要开放的某个网段端口 4001:4020 …

需求管理中最易忽视的6大重点

需求管理是产品经理的重点工作&#xff0c;如果无法有效进行需求管理&#xff0c;往往会引起需求变更、项目延期以及成本增加等问题。那么如何对需求进行高效管理&#xff0c;我们在需求管理中&#xff0c;往往最容易忽视的重点都有哪些&#xff1f; 1、重视项目整体管理计划 首…

VMWare虚拟机常用操作命令

今日一语&#xff1a;做到所有的细节都不放过&#xff0c;则可以避免99%已知的风险&#xff0c;但大多数都因懒惰而甘愿承受风险&#xff0c;至此悔不当初 查看虚拟机在本机网络的IP ip addr 本地向虚拟机传送文件 scp 文件 rootpath 虚拟机路径 enter后输入密码即可传输&am…

运维——编写脚本,使用mysqldump实现分库分表备份。

编写脚本&#xff0c;使用mysqldump实现分库分表备份。 #!/bin/bash# MySQL连接参数 DB_HOST"localhost" DB_PORT"3306" DB_USER"your_username" DB_PASSWORD"your_password"# 备份保存路径 BACKUP_DIR"/path/to/backup"# …

8-js高级-7(理解js的事件循环)

一、前言 JS是单线程语言&#xff0c;但是又可以做到异步处理高并发请求&#xff0c;这时就用到了JavaScript的事件循环机制 理解事件循环&#xff0c;可以帮助我们准确分析和运用各种异步形式&#xff0c;减少代码的不确定性&#xff0c;在一些执行效率优化上也能有明确的思路…