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

实现寄生组合继承

寄生组合继承是一种继承方式,它通过组合使用构造函数继承和原型继承的方式,实现了高效而且正确的继承方式。

具体实现步骤如下:

① 定义一个父类,实现其属性和方法:

    function Person(name) {this.name = namethis.age = 18}Person.prototype.sayName = function() {console.log(this.name)}

② 定义一个子类,通过调用父类构造函数,实现属性的继承:

    function Child(name, age) {// 调用父类的构造函数// 这里使用了构造函数继承实现了属性的继承Person.call(this, name)this.age = age}

③ 将子类的原型指向一个父类的实例,实现方法的继承并避免父类构造函数被调用多次

    // Object.create(proto, prop) 创建一个新对象,指定新对象的原型对象// proto:新创建对象的原型对象// prop:可选,设置属性及属性描述,默认值:undefined。Child.prototype = Object.create(Person.prototype)Child.prototype.constructor = Child

④ 在子类的原型上添加子类自己的方法

    // 在子类的原型上添加子类自己的方法Child.prototype.sayAge = function() {console.log(this.age)}

完整代码:

    // 定义一个父类,实现其属性和方法function Person(name) {this.name = namethis.age = 18}Person.prototype.sayName = function() {console.log(this.name)}// 定义一个子类,通过调用父类构造函数,实现属性的继承function Child(name, age) {// 调用父类的构造函数// 这里使用了构造函数继承实现了属性的继承Person.call(this, name)this.age = age}// 将子类的原型指向一个父类的实例,实现方法的继承并避免父类构造函数被调用多次// Object.create(proto, prop) 创建一个新对象,指定新对象的原型对象// proto:新创建对象的原型对象// prop:可选,设置属性及属性描述,默认值:undefined。Child.prototype = Object.create(Person.prototype)Child.prototype.constructor = Child// 在子类的原型上添加子类自己的方法Child.prototype.sayAge = function() {console.log(this.age)}

实践:

    const child1 = new Child('小草莓', 6)console.log(child1)child1.sayName()child1.sayAge()

http://www.lryc.cn/news/209124.html

相关文章:

  • ARM 账号注册报错 The claims exchange ‘Salesforce-UserWriteUsingEmail‘
  • 笔记:电子设备接地,接的到底是什么地?
  • PY32F002A系列单片机:高性价比、低功耗,满足多样化应用需求
  • 头歌的数据库的第三次作业的答案
  • 前端3D规划
  • appium操控微信小程序的坑
  • 6 个最佳 Windows 免费磁盘分区管理器
  • 【Leetcode】【每日一题】【简单】2558. 从数量最多的堆取走礼物
  • LeetCode 每日一题 2023/10/23-2023/10/29
  • Android:Installed Build Tools revision 33.0.2 is corrupted.
  • 语法复习之C语言与指针
  • vue笔记(二)
  • 【IT行业就业前景广阔:探讨热门方向与就业机会】
  • linux上java -jar方式运行项目及输出文件nohup.out的清理, linux上定时器的用法
  • macOS 12 Monterey v12.7.1正式版:开启全新的操作系统体验
  • vue制作防止用户未登录或未填写信息就跳转页面的路由拦截器
  • postgis ST_CoverageInvalidEdges用法
  • sqlalchemy的部分函数合集
  • mac苹果电脑使用日常
  • 多线程面试相关知识点
  • 关于生成式人工智能模型应用的调研
  • 【问题】在安装torchvision的时候,会自动安装torch?
  • MySQL数据库备份实战
  • 每日一题 2558. 从数量最多的堆取走礼物(简单,heapq)
  • JavaScript中的Promise
  • 【OpenCV实现图像的几何变换】
  • 2023MathorCup(妈妈杯) 数学建模挑战赛 解题思路
  • leetCode 76. 最小覆盖子串 + 滑动窗口 + 哈希Hash
  • 52.MongoDB复制(副本)集实战及其原理分析
  • 【Unity实战】手戳一个自定义角色换装系统——2d3d通用