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日

相关文章

  • 微信小程序API—获取定位的详解

    微信小程序API—获取定位的详解 什么是获取定位? 获取定位是指小程序通过调用微信所提供的API,获得用户当前的地理位置信息。通过获取定位,小程序可以根据用户所在的位置提供相应的服务。 如何获取定位? 在小程序中,我们可以通过wx.getLocation()方法来获取用户当前位置的经纬度信息。在API文档中,我们可以找到该方法的详细描述。下面是该方法的基本语…

    JavaScript 2023年6月11日
    00
  • Javascript Array concat 方法

    以下是关于JavaScript Array concat方法的完整攻略。 JavaScript Array concat方法 JavaScript Array concat方法用于将两个或多个数组合并成一个新数组。该方法不会改变原始数组,而是返回一个新的数组。 下面是一个使用concat方法的示例: var arr1 = [1, 2, 3]; var arr…

    JavaScript 2023年5月11日
    00
  • php实现替换手机号中间数字为*号及隐藏IP最后几位的方法

    PHP实现替换手机号中间数字为*号及隐藏IP最后几位的方法相对简单,下面就具体介绍一下实现的方法及示例。 替换手机号中间数字为*号的方法 方法一:使用正则表达式替换 使用正则表达式是一个常用的方法,即利用preg_replace函数将手机号中间四位数字替换为*号。示例代码如下: $mobile = ‘13811112222’; $pattern = ‘/(\…

    JavaScript 2023年6月10日
    00
  • JavaScript中callee和caller的区别与用法实例分析

    JavaScript中callee和caller都是函数对象的属性,它们可以完成一些特殊的功能。但是,它们的使用需要注意一些细节。接下来,我将为大家详细讲解callee和caller的区别和用法,并提供实例说明。 callee和caller的区别 callee是一个指向当前函数对象的指针,在函数内部可以使用arguments.callee来调用当前函数对象自…

    JavaScript 2023年6月10日
    00
  • js截取中英文字符串、标点符号无乱码示例解读

    下面是关于“js截取中英文字符串、标点符号无乱码”这一问题的完整攻略。 问题概述 在使用JavaScript开发页面时,经常会遇到需要截取字符串的情况,在截取中英文混合的字符串时,可能会遇到中文字符部分被截断而造成乱码的问题,同时标点符号可能也会被当作一般的字符进行处理,导致无法正确截取。本文将为大家提供解决这些问题的方法和例子。 解决方法 方法一:使用正则…

    JavaScript 2023年5月28日
    00
  • jsMind通过鼠标拖拽的方式调整节点位置

    以下是关于“jsMind通过鼠标拖拽的方式调整节点位置”的攻略: 步骤一:引入jsMind库 在页面上引入jsMind库,可以通过以下代码链接到jsMind库: <!–引入jsMind库 CSS文件–> <link rel="stylesheet" type="text/css" href=&qu…

    JavaScript 2023年6月11日
    00
  • JavaScript箭头函数与普通函数的区别示例详解

    JavaScript中有两种定义函数的方式:普通函数和箭头函数。它们在语法和用法上有一些差异。在本文中,我们将通过两个示例来详细介绍箭头函数和普通函数之间的区别。 示例1:this 关键字 一个函数的 this 值取决于调用方式。 在普通函数中,this 关键字根据函数被调用的方式动态绑定。而在箭头函数中,它会捕获它所在上下文的 this 值,而不是动态绑定…

    JavaScript 2023年5月27日
    00
  • Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中

    Json2Template.js是基于jQuery的插件,用于将JavaScript对象绑定到HTML模板中。下面是具体的攻略步骤: 步骤一:引入Json2Template.js和相关依赖 首先需要在页面中引入jQuery和Json2Template.js,如下所示: <script src="https://cdn.bootcss.com/…

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