基于JavaScript 类的使用详解

基于 JavaScript 类的使用详解

JavaScript 的 Class 定义是一种专门为对象的构建提供的语法糖。在ES6之前,JavaScript没有类(class)的概念,只能通过构造函数和原型对象来实现。

类的定义和语法

定义一个类可以使用 class 关键字,后面跟着类名和一对大括号 {}。 大括号内部可以定义类的属性和方法。使用 constructor 方法来定义当对象实例化时所执行的构造函数。

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

以上是一个最基本的类的定义。在类的构造函数上,接收了两个参数,分别为 nameage,类实例化时需传入这两个参数。在类中,我们还定义了一个 greeting() 方法用来向控制台输出类实例的信息。

实例化一个类

实例化类时,需要使用 new 操作符来调用类的构造函数,并返回一个类的实例。

const person1 = new Person('John', 30);
person1.greeting();

以上代码将会输出:

My name is John and I'm 30 years old.

类的继承

类的继承是一种面向对象编程中非常重要的概念,它允许我们创建一个新的类,从一个已经存在的类上继承属性和方法。

class Customer extends Person {
  constructor(name, age, balance) {
    super(name, age);
    this.balance = balance;
  }
  getInfo() {
    return `${this.name} owes ${this.balance}.00`;
  }
}

在以上示例中,我们创建了一个 Customer 类,并将其从 Person 类上继承下来。Customer 类比 Person 类更加具体,包含额外的 balance 属性,并修改了 getInfo() 方法以反映出这个新增的属性。super() 方法调用了父类的构造器,因此在 Customer 类中,我们可以直接调用 this.namethis.age

接下来,我们可以通过 new 操作符来实例化一个 Customer 对象。

const customer1 = new Customer('Tom', 35, 200);
console.log(customer1.greeting()); // My name is Tom and I'm 35 years old.
console.log(customer1.getInfo()); // Tom owes 200.00

输出结果为:

My name is Tom and I'm 35 years old.
Tom owes 200.00

示例 1:使用类定义一个矩形对象,并计算其面积和周长

我们可以创建一个用于计算矩形面积和周长的类。

class Rectangle {
  constructor(length, width) {
    this.length = length;
    this.width = width;
  }

  // 计算矩形的周长
  perimeter() {
    return 2 * (this.length + this.width);
  }

  // 计算矩形的面积
  area() {
    return this.length * this.width;
  }
}

在以上示例中,声明了一个 Rectangle 类,其构造函数接收两个参数 lengthwidth。我们也声明了两个方法 perimeter()area(),以分别计算矩形的周长和面积。

接下来,我们可以实例化一个 Rectangle 对象,并使用其 perimeter()area() 方法来计算矩形的周长和面积。

const rectangle1 = new Rectangle(5, 10);

console.log(rectangle1.perimeter()); // 30
console.log(rectangle1.area()); // 50

输出的结果为:

30
50

示例 2:用一个类管理一个 TODO 列表

我们也可以使用类来管理一个简单的 Todo List。在以下示例中,我们创建了一个 Todo 类,每个 Todo 实例都包含两个属性:textisCompleted。我们可以通过 addTodo() 方法将待办事项添加到列表中。我们还实现了 deleteTodo() 方法,以便从列表中删除已完成的任务。

class Todo {
  constructor() {
    this.list = [];
  }

  // 添加待办事项
  addTodoItem(text) {
    const todo = {
      text: text,
      isCompleted: false
    };
    this.list.push(todo);
  }

  // 删除已完成的任务
  deleteCompletedItems() {
    this.list = this.list.filter(todo => !todo.isCompleted);
  }

  // 设置任务为已完成
  setTodoItemComplete(index) {
    this.list[index].isCompleted = true;
  }

  // 输出任务列表
  displayTodoList() {
    console.log(this.list);
  }
}

以上代码创建了一个 Todo 类,其构造函数定义了一个空的 list 数组,其中 addTodoItem() 方法以待办事项的名字作为参数,将一个代办事项添加到列表中。我们还实现了 deleteCompletedItems() 方法,以便从列表中删除已完成的任务;setTodoItemComplete() 方法,以将任务标记为已完成;displayTodoList() 方法,以将所有待办任务输出到控制台。

以下是如何实例化 Todo 类,并向其列表中添加、删除和完成任务的示例。

const todoList = new Todo();

todoList.addTodoItem('Buy milk');
todoList.addTodoItem('Learn JavaScript');
todoList.displayTodoList(); // 输出两个待办事项对象

// 将第1项任务标记为已完成
todoList.setTodoItemComplete(0);
todoList.displayTodoList(); // 输出两个待办事项对象,但第1项任务被标记为已完成

// 删除已完成过的任务
todoList.deleteCompletedItems();
todoList.displayTodoList(); // 输出1个待办事项,即“Learn JavaScript”

输出的结果为:

[
  { text: 'Buy milk', isCompleted: false },
  { text: 'Learn JavaScript', isCompleted: false }
]
[
  { text: 'Buy milk', isCompleted: true },  // 自动标记
  { text: 'Learn JavaScript', isCompleted: false }
]
[{ text: 'Learn JavaScript', isCompleted: false }]

综上所述,JavaScript 类是在现代 JavaScript 中非常重要的一个概念。类让我们能够更好地组织代码、增加代码的可读性,也让我们的代码更加符合面向对象的编程范式。同时,也有利于我们更好地复用和维护代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于JavaScript 类的使用详解 - Python技术站

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

相关文章

  • Vue实现浏览器端扫码功能

    下面是Vue实现浏览器端扫码功能的完整攻略: 1. 使用第三方库实现扫码 使用第三方库是最简单的实现方式之一。可以使用ZXing-js库,它提供了 JavaScript 代码中解码和编码二维码和条形码的功能。 步骤 安装ZXing-js: bash npm install @zxing/library 在 Vue 应用中引入 ZXing-js: javasc…

    JavaScript 2023年6月11日
    00
  • utf-8编码引起js输出中文乱码的解决办法

    下面是关于“utf-8编码引起js输出中文乱码”的解决办法的完整攻略。 问题描述 当我们在使用 JavaScript 输出中文时,如果页面的编码方式为 utf-8,那么经常会出现中文乱码的问题。就算页面的编码设置正确且合法,但还是无法避免可能遇到的中文输出乱码问题。接下来我们将介绍如何解决这个问题。 解决办法 一个常见的解决方法是将需要输出的中文字符转为 u…

    JavaScript 2023年5月20日
    00
  • JavaScript中CreateTextFile函数

    CreateTextFile函数是JavaScript中一个用于创建文本文件的函数,其语法结构如下: CreateTextFile(filename, overwrite) 它包含两个参数: filename:要创建的文本文件的完整路径和文件名,可以是相对路径或绝对路径。 overwrite:一个可选参数,表示在文件存在时是否覆盖该文件。如果overwrit…

    JavaScript 2023年5月27日
    00
  • JavaScript的==运算详解

    当使用==运算符时,JavaScript将使两个变量之间的比较。==运算符比较两个变量的值,并将其转换为相同类型的值(如果必要),然后进行比较。在本文中,我们将深入探讨==运算符,并解释它是如何运作的。 为什么==运算符容易引起混淆? 在使用==运算符时,我们有一个经常遇到的问题:当我们比较两个不同类型的变量时,结果会出现惊人的错误。例如,以下代码将返回tr…

    JavaScript 2023年5月28日
    00
  • Javascript 获取字符串字节数的多种方法

    当需要统计字符串字节数时,Javascript提供了多种方法。以下是其中两种常见方法。 方法一:使用正则表达式 正则表达式可以帮助我们获取字符串中非ASCII字符的数量。假设我们要获取的字符串为”hello,世界”,该字符串长度为11,但其中含有一个ASCII字符和一个非ASCII字符(中文逗号“,”),因此其字节数为13。 下面是使用正则表达式实现获取字节…

    JavaScript 2023年5月19日
    00
  • PHP+mysql+ajax轻量级聊天室实现方法详解

    以下是关于“PHP+mysql+ajax轻量级聊天室实现方法详解”的完整攻略。 简介 本文将讲解如何使用 PHP、MySQL 和 Ajax 技术来创建一个轻量级聊天室。聊天室将支持实时信息交流和历史消息查看。 技术准备 在开始本教程之前,我们需要准备以下技术: PHP 5.x 或更新版本 MySQL 5.x 或更新版本 Apache 或 Nginx Web …

    JavaScript 2023年6月10日
    00
  • ES6基础之字符串和函数的拓展详解

    很高兴为您介绍“ES6基础之字符串和函数的拓展详解”的完整攻略。 第一部分:字符串的拓展 模板字符串 ES6添加了模板字符串的语法,它使用反引号(`)来定义字符串,并且可以内嵌变量: let name = ‘Lucy’; let age = 18; console.log(`My name is ${name}, and I am ${age} years …

    JavaScript 2023年5月28日
    00
  • JavaScript中的简写语法分享

    当我们在写JavaScript代码的时候,经常会用到一些简写语法来简化代码、提高开发效率。在本篇文章中,我们将会分享一些JavaScript中的简写语法,帮助大家学会如何更加高效地编写JavaScript代码。 一、三元运算符简写 三元运算符通常用于处理条件分支,可以把一个简单if-else语句变得更加简洁。在三元运算符的基础上,我们还可以使用它的简写形式。…

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