当前位置: 首页 > news >正文

寄生组合式继承

寄生组合式继承(Parasitic Combination Inheritance)是 JavaScript 中实现继承的一种方式,它结合了组合继承和寄生继承的优点,同时避免了组合继承中的性能问题。组合继承会导致父类构造函数被调用两次,而寄生组合式继承通过使用原型链来避免这一问题。

下面是寄生组合式继承的实现步骤:

定义父类和子类。
创建父类原型的一个副本,并将其赋值给子类的原型。
修正子类的构造函数指针。
给子类添加一个调用父类构造函数的函数,并传递相应的参数。

// 父类构造函数
function Parent(name) {this.name = name;this.colors = ['red', 'blue', 'green'];
}Parent.prototype.sayName = function() {console.log(this.name);
};// 子类构造函数
function Child(name, age) {Parent.call(this, name); // 继承实例属性,第一次调用 Parent 构造函数this.age = age;
}// 创建父类原型的副本
function inheritPrototype(child, parent) {let prototype = Object.create(parent.prototype); // 创建对象prototype.constructor = child; // 增强对象child.prototype = prototype; // 赋值对象
}// 继承父类的原型方法
inheritPrototype(Child, Parent);Child.prototype.sayAge = function() {console.log(this.age);
};// 测试代码
const child1 = new Child('Alice', 18);
child1.sayName(); // 输出: Alice
child1.sayAge(); // 输出: 18
child1.colors.push('black');
console.log(child1.colors); // 输出: ['red', 'blue', 'green', 'black']const child2 = new Child('Bob', 20);
child2.sayName(); // 输出: Bob
child2.sayAge(); // 输出: 20
console.log(child2.colors); // 输出: ['red', 'blue', 'green']

相关文章:

  • 什么是零拷贝
  • 内网对抗-隧道技术篇防火墙组策略HTTP反向SSH转发出网穿透CrossC2解决方案
  • asp.net core 集成redis详解
  • 数据挖掘-数据预处理
  • langchain 入门指南 - ReAct 模式
  • 微软全球蓝屏带来的思考及未来战争走向
  • 实验一 FPGA使用Verilog HDL设计选择器
  • 【数据结构】:大厂面试经典链表OJ题目详解
  • 【笔记-软考】层次式架构-表现层框架设计
  • 跨域浏览器解决前端跨域问题
  • 构建现代化农业产业服务平台的系统架构
  • Ruby、Python、Java 开发者必备:Codigger之软件项目体检
  • [数据集][目标检测]野猪检测数据集VOC+YOLO格式1000张1类别
  • Spring Security认证授权介绍
  • vue3 使用Mock
  • [译]前端离线指南(上)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Android Volley源码解析
  • Android单元测试 - 几个重要问题
  • ES6 ...操作符
  • GraphQL学习过程应该是这样的
  • Java读取Properties文件的六种方法
  • jquery cookie
  • JS数组方法汇总
  • Netty源码解析1-Buffer
  • oldjun 检测网站的经验
  • Solarized Scheme
  • SpiderData 2019年2月13日 DApp数据排行榜
  • vue 个人积累(使用工具,组件)
  • vue 配置sass、scss全局变量
  • 阿里云应用高可用服务公测发布
  • 高度不固定时垂直居中
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 自制字幕遮挡器
  • Nginx实现动静分离
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​批处理文件中的errorlevel用法
  • # 计算机视觉入门
  • #pragma pack(1)
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (c语言)strcpy函数用法
  • (Java数据结构)ArrayList
  • (二)linux使用docker容器运行mysql
  • (四)stm32之通信协议
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • ***测试-HTTP方法
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .env.development、.env.production、.env.staging
  • .net SqlSugarHelper
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换