首页 > 其他分享 >js组合继承

js组合继承

时间:2024-06-22 15:30:32浏览次数:30  
标签:组合 继承 子类 js 原型 Child 父类 构造函数

JS组合继承(combination inheritance)是一种常用的继承模式,它通过将原型链和构造函数组合使用来实现继承。

下面是JS组合继承的详细解析和代码示例:

  1. 创建父类(基类)的构造函数
function Parent(name) {
  this.name = name;
  this.colors = ['red', 'green', 'blue'];
}

  1. 给父类添加原型方法
Parent.prototype.getName = function() {
  console.log(this.name);
};

  1. 创建子类的构造函数,并调用父类构造函数
function Child(name, age) {
  Parent.call(this, name);
  this.age = age;
}

  1. 设置子类的原型为一个父类实例
Child.prototype = new Parent();

  1. 修正子类的构造函数指向
Child.prototype.constructor = Child;

  1. 添加子类的原型方法
Child.prototype.getAge = function() {
  console.log(this.age);
};

  1. 创建子类的实例,并调用父类和子类的方法
var child1 = new Child('Alice', 10);
child1.getName();  // 输出:Alice
child1.getAge();   // 输出:10

child1.colors.push('yellow');
console.log(child1.colors);  // 输出:['red', 'green', 'blue', 'yellow']

var child2 = new Child('Bob', 20);
child2.getName();  // 输出:Bob
child2.getAge();   // 输出:20
console.log(child2.colors);  // 输出:['red', 'green', 'blue']

在这个例子中,通过组合使用构造函数和原型链实现了继承。构造函数的继承通过在子类的构造函数中调用父类的构造函数来实现,这样就可以在子类的实例中拥有父类的属性。原型链的继承通过将子类的原型对象设置为父类的一个实例,这样就可以在子类的原型链上访问父类的方法。

需要注意的是,组合继承的缺点是在创建子类实例时调用了两次父类构造函数,一次是在Child.prototype = new Parent()这一步中,另一次是在Child.call(this, name)中。这样会导致子类的原型对象上多了一些不必要的属性,但是通过Object.create()可以解决这个问题。

总结:JS组合继承是一种常用的继承模式,它通过组合使用构造函数和原型链实现继承。虽然有一些缺点,但是它兼顾了构造函数继承和原型链继承的优点,可以有效地实现继承和方法的重用。

标签:组合,继承,子类,js,原型,Child,父类,构造函数
From: https://blog.csdn.net/zxcv321zxcv/article/details/139883179

相关文章

  • 前端网页开发学习(HTML+CSS+JS)有这一篇就够!
    目录HTML教程▐ 概述▐ 基础语法▐ 文本标签▐ 列表标签 ▐ 表格标签▐ 表单标签CSS教程▐概述▐基础语法▐选择器▐修饰文本▐修饰背景▐透明度▐伪类▐盒子模型▐ 浮动▐ 定位JavaScript教程▐概述▐ 基础语法▐函数▐事件▐......
  • 安装和使用nvm安装Nodejs
    文章目录安装和使用nvm1.安装nvm2.重新加载终端配置3.安装所需的Node.js版本4.使用安装的Node.js版本nvm常用命令安装和使用nvm以下是安装nvm并使用它来安装Node.js的步骤:1.安装nvm首先,您需要安装nvm。您可以使用curl或wget来完成安装:......
  • 程序猿大战Python——面向对象——继承基础
    定义类的几种语法==目标:==了解定义类的标准语法。我们知道,可以使用class关键字定义类。在类的使用中,定义方式有三种:(1)【类名】(2)【类名()】(3)【类名(object)】说明:区别在于类名后面是否加其他内容。方式1语法:class类名:代码...方式2语法:class类名(......
  • 1.3 多项式乘法及其组合意义
    记号1设\(f(x)\)是关于变元\(x\)的多项式,则对正整数\(n\),记\(\left[x^n\right]f:=f(x)\)的\(x^n\)项系数.例如,若$f(x)=-3+5x+7x^3$,则$\left[x^0\right]f=-3,\left[x^1\right]f=5,\left[x^2\right]f=0$,$\left[x^3\right]f=7$.一般地,由微积分中......
  • 基于SSM+JSP的校园闲置物品交易平台(带1w+字文档)
    基于SSM+JSP的校园闲置物品交易平台(带1w+字文档)该校园闲置物品交易平台在Windows平台下完成开发,采用java编程语言开发,将应用程序部署于Tomcat上,加之MySQL接口来实现交互式响应服务器上的数据,将最终效果呈现于服务器上。运用MySQL数据库,使用Navicatpremium连接数据库,从......
  • 190.回溯算法:组合(力扣)
    代码随想录(programmercarl.com)一、什么是回溯算法    回溯算法是一种通用的算法设计技巧,特别适用于解决组合、排列、子集等问题。它通过逐步构建解决方案,并在发现部分解决方案无效时撤销(回溯)部分计算,从而寻找所有可能的解决方案。    回溯算法的基本思......
  • C++PrimerPlus:第十三章类和继承:抽象基类
    :第十三章类和继承:抽象基类提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如::第十三章类和继承:抽象基类提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录:第十三章类和继承:抽象基类前言一、抽象基类总结前言提示:这......
  • Json工具类
    publicstaticclassJsonHelper{///<summary>///将对象序列化为JSON格式///</summary>///<paramname="o">对象</param>///<returns>json字符串</returns>publicstaticstringSerializeObject(object......
  • Java爬虫入门(2) Jsoup使用
    Jsoup介绍:    一款Java对html的解析工具。Jsoup的基础使用:    导入Maven依赖:                <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.3</version></dependency>......
  • 对JSONUtil.toBean()的理解
    在Java中,JSONUtil.toBean()​方法的作用是将JSON格式的数据转换为Java对象。这个方法通常属于一些JSON处理库(例如Hutool库中的JSONUtil),它提供了便捷的方式将JSON字符串中的数据映射到Java对象的相应属性上。这样可以使得开发者能够以面向对象的方式处理JSON数据,而无需手动解析JSO......