JS面向对象编程——ES6 中class的继承用法详解

JS面向对象编程——ES6 中class的继承用法详解

1. ES6中的class

ES6中引入了class关键字,使得JS中的面向对象编程更为易用和易读。class语法基于原型继承实现,更加直观和易于理解,在编写复杂程序时更为方便。

下面是一个class的示例代码:

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  sayHello() {
    console.log(`My name is ${this.name}, I'm ${this.age} years old.`);
  }
}

定义了一个名为Person的类,有两个实例属性:name和age。其中name和age是在构造函数中进行初始化的,而sayHello方法是在class中声明的。下面我们可以创建Person类的实例并调用其方法:

const person1 = new Person('Tom', 20);
person1.sayHello();   // output: My name is Tom, I'm 20 years old.

2. class的继承

在面向对象编程中,常需要对已有的类进行扩展。这里也是通过ES6中的class来实现。class可以继承已有的类,通过继承获得父类的公共属性和方法。

以下是一个继承的示例代码:

class Student extends Person {
  constructor(name, age, grade) {
    super(name, age); // 调用父类的构造函数
    this.grade = grade;
  }
  sayGrade() {
    console.log(`${this.name} is in grade ${this.grade}.`);
  }
}

const student1 = new Student('Lucy', 18, 12);
student1.sayHello();  // output: My name is Lucy, I'm 18 years old.
student1.sayGrade();  // output: Lucy is in grade 12.

在这个示例中,Student类继承了Person类,拥有了Person类的所有公共属性和方法。同时,Student类拥有自己的实例属性grade和方法sayGrade,这些属性和方法可以在子类中添加,不影响父类。

在继承中,子类可以调用super()方法获取父类的属性和方法。示例代码中的super(name, age)通过调用父类的构造函数来初始化name和age属性。

3. 示例解析

接下来,我们举两个示例来详细说明class的继承用法。

示例1

class Animal {
  constructor(type) {
    this.type = type;
  }
  eat() {
    console.log(`I'm a ${this.type}, I can eat.`);
  }
}

class Cat extends Animal {
  constructor(name, type) {
    super(type);
    this.name = name;
  }
  introduce() {
    console.log(`I'm a ${this.type}, my name is ${this.name}.`);
  }
}

const cat1 = new Cat('Kitty', 'cat');
cat1.introduce();  // output: I'm a cat, my name is Kitty.
cat1.eat();        // output: I'm a cat, I can eat.

这个示例实现了一个Animal类,和一个子类Cat。Animal类拥有实例属性type和方法eat;Cat类继承了Animal类,并添加了自己的实例属性name和方法introduce。

示例2

class Shape {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
  move(dx, dy) {
    this.x += dx;
    this.y += dy;
  }
  static describe() {
    console.log('This is a shape.');
  }
}

class Circle extends Shape {
  constructor(x, y, r) {
    super(x, y);
    this.r = r;
  }
  area() {
    return Math.PI * this.r * this.r;
  }
}

const circle1 = new Circle(0, 0, 5);
console.log(circle1.area());  // output: 78.53981633974483
circle1.move(1, 2);
console.log(`The center of circle1 is (${circle1.x}, ${circle1.y}).`); // output: The center of circle1 is (1, 2).
Shape.describe();  // output: This is a shape.

这个示例实现了一个Shape类,有实例属性x、y和方法move,还有一个静态方法describe;Circle类继承了Shape类,并添加了自己的实例属性r和方法area,计算圆的面积。

在这个示例中,我们使用了静态方法describe来描述Shape类,这个静态方法可以直接在类名上调用,不需要实例化。同时,我们也可以借助静态方法来实现一些公共的辅助方法或工具函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS面向对象编程——ES6 中class的继承用法详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • uniapp中使用计时器setInterval的场景与方法

    关于在uni-app中使用计时器setInterval的场景与方法,我们应该从以下几个方面进行详细讲解: setIntaval计时器的基本使用方法 在uni-app中setInterval的使用注意事项 uni-app中使用setInterval实现定时器模拟倒计时效果 uni-app中使用setInterval实现图片轮播效果 下面我们来一一进行说明: 1…

    JavaScript 2023年6月11日
    00
  • ASP.Net MVC+Data Table实现分页+排序功能的方法

    一、简介 在ASP.Net MVC网站开发过程中,常常需要实现分页、排序等功能来展示数据。Data Table是一个功能强大、易于使用的表格插件,可以很好地实现这些功能。本文将详细介绍如何在ASP.Net MVC中使用Data Table实现分页、排序功能的方法。 二、实现步骤 安装Data Table插件。可以从官网下载最新版本,也可以通过NuGet安装。…

    JavaScript 2023年6月11日
    00
  • javascript中replace使用方法总结

    JavaScript中replace使用方法总结 replace()方法是JavaScript中字符串对象的一个常用方法,其作用是在字符串中搜索指定的子字符串或者正则表达式,并将其替换为新的子字符串。在本篇文章中,我们将对replace()方法进行详细的讲解和总结。 基本使用 replace()方法的基本语法如下: string.replace(search…

    JavaScript 2023年5月28日
    00
  • 详解JavaScript实现监听路由变化

    那么就让我来详细讲解一下“详解JavaScript实现监听路由变化”的完整攻略吧。 一、引言 当我们使用现代化 JavaScript 框架时,我们通常需要动态地更新页面视图以匹配 URL 路径中的路由而不进行任何页面重新加载。这就是我们需要路由监听的原因,以更新浏览器 URL 的时候同时不需要全量渲染页面。在本文中,我们会一起探讨如何实现 JavaScrip…

    JavaScript 2023年5月27日
    00
  • PHP利用Cookie设置用户30分钟未操作自动退出功能

    下面是设置自动退出功能的完整攻略。 1. 首先需要了解什么是Cookie Cookie是一种存在于用户浏览器本地的数据。利用Cookie可以将信息保存在用户的电脑或移动设备上,以便进行持久化访问。PHP中可以使用setcookie()函数设置Cookie。 2. 利用setcookie()函数设置Cookie setcookie(name, value, e…

    JavaScript 2023年6月11日
    00
  • JS实现的走迷宫小游戏完整实例

    下面是“JS实现的走迷宫小游戏完整实例”的完整攻略: 1.准备工作 1.1 HTML结构 在HTML中使用一个canvas元素来绘制迷宫,并使用一个button元素来触发游戏。示例代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g…

    JavaScript 2023年5月28日
    00
  • 教你javascript如何获取指针的位置

    教你javascript如何获取指针的位置 什么是指针? 在计算机中,指针是一个变量,存储了一个内存地址,该地址指向一个数据单元。指针可以被用来直接访问和修改内存中的数据,因此它在程序中非常有用。 在JavaScript中,由于其具有自动内存管理机制,因此没有指针类型。但是,在某些情况下,我们需要获取鼠标指针在页面中的位置。 获取鼠标指针位置 在JavaSc…

    JavaScript 2023年6月11日
    00
  • JS正则表达式验证数字代码

    下面我将详细讲解 JS 正则表达式验证数字代码的完整攻略。 步骤 1. 构建正则表达式 首先需要构建一个用于验证数字的正则表达式。一般来说,数字可以包含整数和小数,还可能有正负号。 验证整数和小数的正则表达式如下: /^-?\d+(\.\d+)?$/ 其中: ^ 表示字符串开始 -? 表示可以有一个可选的负号 \d+ 表示至少一个数字 (\.\d+)? 表示…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部