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

yizhihongxing

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日

相关文章

  • 详解Bootstrap创建表单的三种格式(一)

    我可以给你详细讲解一下“详解Bootstrap创建表单的三种格式(一)”的完整攻略。 标题 首先,我们需要了解Bootstrap是什么以及它的作用。Bootstrap是Twitter公司开源的一款前端开发框架,主要用于快速实现响应式布局和美化各类界面。特别是在表单的开发中,它们的优势会显得更加明显。Bootstrap提供了三种创建表单的格式,接下来分别进行详…

    JavaScript 2023年6月10日
    00
  • javascript 词法作用域和闭包分析说明

    Javascript 词法作用域和闭包分析说明 什么是词法作用域 Javascript 的词法作用域是指一个变量的作用范围仅限于它所在的代码块内部。也就是说,一个变量的作用域由它在代码中的位置决定。 举个例子: var a = 1; function foo() { var b = 2; console.log(a, b); // 1, 2 } foo();…

    JavaScript 2023年6月10日
    00
  • 你真的了解BOM中的history对象吗

    当涉及到浏览器对象模型(BOM)时,常用的对象之一就是history对象。 这个对象允许我们访问正在打开并已经关闭的浏览器窗口的历史记录。 1. history对象简介 history对象是浏览器的窗口历史记录, 它是Window对象中的一个属性,可以使用window.history属性来访问它。history对象包含用户在浏览器中访问的所有页面的历史记录,…

    JavaScript 2023年6月11日
    00
  • JS获取一个表单字段中多条数据并转化为json格式

    要获取一个表单字段中多条数据并转化为JSON格式,可以按如下步骤进行: 获取表单字段的值 首先,需要获取表单字段的值。可以使用document.getElementsByName()方法来获取表单字段的所有值。 例如,表单中有一个名称为“fruit”的checkbox列表,它包含多个不同的水果,可以使用以下代码获取所选水果的值: var fruit = do…

    JavaScript 2023年5月27日
    00
  • JS数组搜索之折半搜索实现方法分析

    JS数组搜索之折半搜索实现方法分析 什么是折半搜索 折半搜索,也称二分搜索,是一种高效的搜索算法,它可以在一个已经按照某种顺序排好序的数组中查找某个值的位置。折半搜索每次对数组进行“折半”,判断目标值在左半部分还是右半部分,然后重复这个过程,直到找到目标值或者确定目标值不存在于数组中。 如何实现折半搜索 在JavaScript中,可以通过以下代码实现一个折半…

    JavaScript 2023年5月28日
    00
  • Javascript数组的 splice 方法详细介绍

    Javascript数组的 splice 方法详细介绍 splice() 是 Javascript 数组对象的一个方法,用于在数组中增加或删除元素。该方法会直接修改原始数组。 语法 array.splice(start[, deleteCount[, item1[, item2[, …]]]]) 参数解释 start: 修改的起始位置,必传参数。 del…

    JavaScript 2023年5月27日
    00
  • 通过实例解析json与jsonp原理及使用方法

    通过实例解析JSON与JSONP原理及使用方法 什么是JSON JSON(JavaScript Object Notation)即 JavaScript 对象表示法,是一种轻量级的数据交换格式,易于阅读和编写。JSON采用基础元素(值value,列表list/array,对象object)来描述数据对象,因此可以表示复杂的数据结构。 JSON的基本语法 在J…

    JavaScript 2023年5月27日
    00
  • js获取当前页面路径示例讲解

    下面是“js获取当前页面路径示例讲解”的完整攻略。 什么是页面路径? Web页面的路径是指从Web服务器到Web文档的绝对或相对路径。绝对路径是从根目录开始的完整路径,如:http://www.example.com/index.html;而相对路径则是相对于当前文件所在的路径,如:./index.html。 如何在JS中获取当前页面路径? 获取当前页面路径…

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