ES6 Class 类的基本语法


一、回顾:ES5 中创建对象的方式(传统构造函数)

在 ES6 之前,我们使用构造函数和原型来模拟"类"的概念。

示例代码:

javascript 复制代码
// 1. 创建一个构造函数
function Person(name) {
  this.name = name;
}

// 2. 在原型上添加方法
Person.prototype.sayHello = function() {
  console.log('你好,我是 ' + this.name);
};

// 3. 使用 new 关键字实例化对象
let zhangsan = new Person('张三');
zhangsan.sayHello(); // 输出:你好,我是 张三

存在的问题:

  • 这种写法与 Java、C++ 等传统面向对象语言的语法差异很大。
  • 对于从后端(如 Java)转向前端的开发者来说,这种写法非常令人困惑,不够直观。

二、ES6 的解决方案:Class 类

为了解决上述问题,ES6 引入了 class 关键字,提供了一种更接近传统面向对象语言的、更清晰的语法来创建对象。

基本语法结构:

javascript 复制代码
class ClassName {
  // 构造函数,用于初始化对象
  constructor(parameters) {
    // 初始化属性...
  }

  // 实例方法,直接写在类体内
  method1() { ... }
  method2() { ... }
}

三、ES6 Class 写法示例

我们将上面的 ES5 构造函数改写成 ES6 Class 的形式。

示例代码:

javascript 复制代码
// 1. 使用 class 关键字定义一个类
class Person {
  // 2. constructor 构造方法,相当于之前的 Person 函数
  constructor(name) {
    this.name = name; // this 指向实例对象
  }

  // 3. 在类内部直接定义方法(这些方法会自动挂在原型上)
  sayHello() {
    console.log(`你好,我是 ${this.name}`);
  }

  run() {
    console.log(`${this.name} 正在跑步。`);
  }
}

// 4. 使用 new 创建实例(和 ES5 一样)
let lisi = new Person('李四');
lisi.sayHello(); // 输出:你好,我是 李四
lisi.run();      // 输出:李四 正在跑步。

// 传参到构造函数
let wangwu = new Person('王五', 19); // 参数传到 constructor 中
wangwu.sayHello();

四、对比与总结

特性 ES5 构造函数 ES6 Class
定义 function Person() {} class Person {}
构造方法 函数本身 function Person(name) { this.name = name; } constructor(name) { this.name = name; }
定义方法 Person.prototype.sayHello = function() {} 直接在类内写 sayHello() {}
实例化 new Person() new Person()
面向对象友好度 低,语法独特 高,接近传统面向对象语言

核心要点:

  1. constructor 方法 :是类的默认方法,在通过 new 命令生成对象实例时,自动调用该方法。一个类必须有 constructor 方法,如果没有显式定义,一个空的 constructor 方法会被默认添加。
  2. 类的方法 :只需要直接写在类体内,不需要加 function 关键字,方法之间也不需要逗号分隔。
  3. 本质 :ES6 的 Class 可以看作只是一个语法糖 ,它的大部分功能,ES5 都可以做到。新的 class 写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。它的底层实现机制并没有改变。

五、结论

ES6 的 Class 为 JavaScript 带来了更现代化、更易读(尤其是对于有其他语言背景的开发者)的面向对象编程语法。它"换汤不换药",最终仍是通过原型和构造函数来实现的,但在使用层面上极大地提升了开发体验。


相关推荐
季春二九10 分钟前
Edge 卸载工具 | 版本号1.0 | 专为彻底卸载Microsoft Edge设计
前端·microsoft·edge·edge 卸载工具
雨过天晴而后无语11 分钟前
HTML中JS监听输入框值的即时变化
前端·javascript·html
座山雕~13 分钟前
html 和css基础常用的标签和样式(2)-css
前端·css·html
一勺菠萝丶17 分钟前
为什么 HTTP 能访问,但 HTTPS 却打不开?——Nginx SSL 端口配置详解
前端
4Forsee26 分钟前
【Android】消息机制
android·java·前端
不爱说话郭德纲26 分钟前
UniappX不会运行到鸿蒙?超超超保姆级鸿蒙开发生成证书以及配置证书步骤
前端·uni-app·harmonyos
Olafur_zbj29 分钟前
【IC】NoC设计入门 -- 网络接口NI Slave
前端·javascript·php
IT_陈寒33 分钟前
React性能优化:10个90%开发者不知道的useEffect正确使用姿势
前端·人工智能·后端
赵小川36 分钟前
告别“切图仔”?我用一个神器,让Figma设计稿自动生成前端代码!
前端
Apifox37 分钟前
如何在 Apifox 中使用 OpenAPI 的 discriminator?
前端·后端·测试