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日

相关文章

  • js 数据存储和DOM编程

    JS 数据存储和 DOM 编程攻略 概述 JavaScript 是一种具有灵活性和交互性的编程语言,它在 Web 开发中扮演着重要的角色。其中,数据存储是支撑 Web 应用程序的关键之一,DOM 编程则是实现动态 Web 应用程序的重要手段之一。 本攻略将向您介绍如何使用 JS 实现数据存储和 DOM 编程的基本知识。本攻略分为以下两个部分: JS 数据存储…

    JavaScript 2023年6月10日
    00
  • JS实现网络请求的三种方式梳理

    JS实现网络请求的三种方式梳理 在JavaScript开发中,网络请求是不可或缺的一部分,下面是三种常用的实现网络请求的方式: 1. XMLHttpRequest请求 XMLHttpRequest是一个原生JavaScript对象,它是一个浏览器提供的api,用来在浏览器和服务器之间发送HTTP请求和接收服务器数据。XMLHttpRequest请求的基本流程…

    JavaScript 2023年6月11日
    00
  • JS正则子匹配实例分析

    JS正则表达式是一种强大的工具,它可以帮助程序员通过一定的规则来匹配和查找字符串中的特定字符,从而实现很多功能。而子匹配(也叫捕获组)是正则表达式的一个重要特性,它是指在正则表达式中使用括号包围某些字符,以便在匹配成功时可以获取这些字符。 下面我们将通过两个示例来演示JS正则子匹配的使用方法: 示例1:提取URL字符串中的文件名和后缀名 我们有一个URL字符…

    JavaScript 2023年6月10日
    00
  • Angular.js中window.onload(),$(document).ready()的写法浅析

    Angular.js在页面加载和渲染完成后,可以使用一些方法来操作DOM元素,例如window.onload()和$(document).ready()。但是在Angular.js中,推荐使用指令来操作DOM元素。本文将分别对window.onload()和$(document).ready()以及指令的使用进行讲解。 window.onload()的用法 …

    JavaScript 2023年6月10日
    00
  • 学习js所必须要知道的一些

    学习JavaScript所必须要知道的一些攻略 简介 学习JavaScript(以下简称JS)时,需要一些基础知识,其中包括语法、DOM操作、Ajax、闭包等等。下面将详细介绍学习JS的一些必备知识。 1. 语法 1.1 数据类型 JS包含7种不同的数据类型,分为原始类型和对象类型。原始类型包括: 数字(Number):整数或浮点数 字符串(String):…

    JavaScript 2023年5月28日
    00
  • JS重要知识点小结

    JS重要知识点小结 1. 变量与数据类型 1.1 变量声明与赋值 在JS中,我们声明一个变量需要使用var关键字,赋值则使用=号,如下所示: var num = 5; //声明并赋值一个数值型变量 var str = ‘hello’; //声明并赋值一个字符串型变量 var arr = [1,2,3]; //声明并赋值一个数组型变量 1.2 数据类型 在JS…

    JavaScript 2023年6月10日
    00
  • js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】

    当网页中所有的元素都被加载之后,我们可以使用JS中的文档就绪函数来动态改变页面内容。其中,innerHTML和innerText是两个用于改变元素内容的函数。下面详细介绍如何使用这两个函数实现动态改变页面内容的效果。 1. 文档就绪函数 JavaScript提供了两种文档就绪函数: window.onload: 当整个页面(包括图片、样式文件等)都加载完毕之…

    JavaScript 2023年6月10日
    00
  • JS数组方法concat()用法实例分析

    JS数组方法concat()用法实例分析 简介 JavaScript中的数组方法concat()可以将多个数组(或值)连接成一个新数组,并返回该新数组。原数组不会被改变。该方法不会改变原始数组,而是返回一个新数组。 该方法是 JavaScript 的一个重要工具,可以用在很多场合。比如: 连接不同的数组,创建一个新的数组。 将一个或多个值添加到数组中。 将数…

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