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 特性。

相关推荐
WYiQIU21 小时前
11月面了7.8家前端岗,兄弟们12月我先躺为敬...
前端·vue.js·react.js·面试·前端框架·飞书
娃哈哈哈哈呀1 天前
formData 传参 如何传数组
前端·javascript·vue.js
513495921 天前
Vite环境变量配置
vue.js
2503_928411561 天前
11.24 Vue-组件2
前端·javascript·vue.js
weixin79893765432...1 天前
Vue + Express + DeepSeek 实现一个简单的对话式 AI 应用
vue.js·人工智能·express
高级程序源1 天前
springboot社区医疗中心预约挂号平台app-计算机毕业设计源码16750
java·vue.js·spring boot·mysql·spring·maven·mybatis
cypking1 天前
Vue 3 + Vite + Router + Pinia + Element Plus + Monorepo + qiankun 构建企业级中后台前端框架
前端·javascript·vue.js
雨雨雨雨雨别下啦1 天前
【从0开始学前端】vue3简介、核心代码、生命周期
前端·vue.js·vue
Dorcas_FE1 天前
【tips】动态el-form-item中校验的注意点
前端·javascript·vue.js
四岁爱上了她1 天前
input输入框焦点的获取和隐藏div,一个自定义的下拉选择
前端·javascript·vue.js