es6 基础学习之class的相关

ES6 中的 class

在 ES6(ECMAScript 2015)中,class 关键字引入了一种新的方式来创建和继承对象。这种语法更接近传统的面向对象编程语言,如 Java 和 C++,从而使得对象模型更易理解和使用。

基础语法

下面是一个简单的 class 定义:

javascript 复制代码
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  sayHello() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

const john = new Person('John', 30);
john.sayHello();  // 输出 "Hello, my name is John"

构造函数 constructor

constructor 是一个特殊的方法,用于创建和初始化由 class 创建的对象。一个类只能拥有一个名为 "constructor" 的特殊方法。

实例方法和属性

constructor 方法中定义的属性和方法是实例属性和方法,每个实例对象都有自己的一份。

静态方法和属性

使用 static 关键字,你可以定义一个类的静态方法。静态方法不会出现在类的实例上,而是直接出现在类本身上。

javascript 复制代码
class MathHelper {
  static square(x) {
    return x * x;
  }
}

console.log(MathHelper.square(5));  // 输出 25

继承(Inheritance)

使用 extends 关键字创建一个类作为另一个类的子类。

javascript 复制代码
class Student extends Person {
  constructor(name, age, grade) {
    super(name, age);  // 调用父类的 constructor
    this.grade = grade;
  }

  sayGrade() {
    console.log(`I am in grade ${this.grade}`);
  }
}

const jane = new Student('Jane', 20, 'Grade 1');
jane.sayHello();  // 输出 "Hello, my name is Jane"
jane.sayGrade();  // 输出 "I am in grade Grade 1"

访问器(Getters 和 Setters)

你可以使用 getset 关键字来创建对象属性的访问器。

javascript 复制代码
class Circle {
  constructor(radius) {
    this._radius = radius;
  }

  get radius() {
    return this._radius;
  }

  set radius(value) {
    if (value <= 0) {
      console.log('Invalid radius');
    } else {
      this._radius = value;
    }
  }
}

const circle = new Circle(5);
console.log(circle.radius);  // 输出 5

circle.radius = -1;  // 输出 "Invalid radius"

私有属性和方法(提案)

目前,JavaScript 还没有提供原生的方式来定义私有属性和方法,但有一个字段声明的提案,使用 # 符号来声明私有属性。

javascript 复制代码
class Counter {
  #count = 0;

  increment() {
    this.#count++;
  }

  getCount() {
    return this.#count;
  }
}

这些是 ES6 中 class 的主要特性和用法。这些新特性提供了一种更结构化、更面向对象的方式来组织代码,使得 JavaScript 变得更加灵活和强大。希望这些信息能帮助你更好地理解和使用 ES6 中的 class 特性。

相关推荐
TrisighT28 分钟前
uni-app鸿蒙原生应用开发实战(下):核心功能实现与技术细节
vue.js·harmonyos
无心使然1 小时前
Openlayers图层按需分层渲染到不同Canvas画布
前端·vue.js·gis
daols881 小时前
vxe-table 实现 Excel 风格向下复制填充(Ctrl + D 键)
javascript·vue.js·excel·vxe-table·vxe-ui
fxshy1 小时前
Vue 组件中 padding 生效了,但竖线还是贴到底边的问题
javascript·vue.js·ecmascript
Aotman_1 小时前
JavaScript数组对象中指定字段转换
java·开发语言·前端·javascript·vue.js·前端框架·es6
源码宝2 小时前
基于SpringBoot+Vue+小程序+Android的智慧校园电子班牌系统源码示例
vue.js·spring boot·架构·智慧校园·电子班牌·源码·代码
_xaboy2 小时前
开源AI表单设计器 FcDesigner v3.5 版本发布!
前端·vue.js·低代码·开源·表单
段ヤシ.2 小时前
【Java框架】知识点汇总Day7:Spring Boot +Vue(持续更新)
vue.js·spring boot·后端·框架
风之舞_yjf2 小时前
Vue基础(33)_web Storage(web存储)
前端·javascript·vue.js
夜空孤狼啸2 小时前
Vue Data UI:这不是图表库,是数据可视化 UI 平台
vue.js·ui·信息可视化