ES6 Class 语法详解:从构造函数到静态方法

作者:半夏时间:2026-10-23 15:57:20浏览:449

本文深入解析 ES6 中 Class 的核心用法。ES6 的类实质上是 ES5 构造函数的语法糖,旨在提供更清晰的面向对象编程体验。文章详细讲解了 constructor 构造函数的自动调用机制、实例方法的定义规范,以及通过 static 关键字定义静态方法及其继承特性,帮助开发者掌握现代 JavaScript 的类定义与使用技巧。

ES6 Class 语法概述

本文通过实例详细解析原生 JavaScript 中 ES6 里 Class(类)的具体用法,供读者参考学习。

ES6 中 Class 的写法示例如下。


class Point {
 constructor(x, y) {
  this.x = x;
  this.y = y;
 }
 toString() {
  return '(' + this.x + ', ' + this.y + ')';
 }
}

对比 ES5 的传统写法。


function Point(x, y) {
 this.x = x;
 this.y = y;
}
Point.prototype.toString = function () {
 return '(' + this.x + ', ' + this.y + ')';
};
var p = new Point(1, 2);

两者对比分析。

总体而言,ES6 的 class 可视为一种语法糖,其大部分功能在 ES5 中均可实现。新的 class 写法仅使对象原型的定义更加清晰,更贴近面向对象编程的语法风格。上述代码若使用 ES6 的 class 进行改写,即表现为前文所示的第一种形式。

构造方法与实例定义

上述代码定义了一个类,其中包含一个 constructor 方法,该方法即为构造方法,而 this 关键字在此处代表实例对象。换言之,ES5 中的构造函数 Point 对应 ES6 中 Point 类的构造方法。

Point 类除构造方法外,还定义了一个 toString 方法。需注意,在定义类的方法时,无需添加 function 关键字,直接将函数定义放入即可。此外,方法之间无需使用逗号分隔,若添加逗号将会导致报错。

在实例化使用时,直接对类使用 new 命令,其用法与构造函数的使用方式完全一致。


class Bar {
 doStuff() {
  console.log('stuff');
 }
}
var b = new Bar();
b.doStuff() // "stuff"

这实际上是在调用原型上的方法。

| `class B {} let b = new B();

b.constructor === B.prototype.constructor // true`| |

在上述代码中,b 是 B 类的实例,其 constructor 方法即为 B 类原型的 constructor 方法。

constructor 方法详解

关于 constructor 方法。

constructor 方法是类的默认方法,通过 new 命令生成对象实例时会自动调用该方法。一个类必须包含 constructor 方法,若未显式定义,系统将默认添加一个空的 constructor 方法。


class Point {
}
// 等同于
class Point {
 constructor() {}
}

在上述代码中,定义了一个空的类 Point,JavaScript 引擎会自动为其添加一个空的 constructor 方法。

constructor 方法默认返回实例对象(即 this),但也可以指定返回另一个对象。


class Foo {
 constructor() {
  return Object.create(null);
 }
}
new Foo() instanceof Foo

静态方法与继承

关于静态方法。

类相当于实例的原型,在类中定义的所有方法都会被实例继承。若在方法前加上 static 关键字,则表示该方法不会被实例继承,而是直接通过类来调用,此类方法称为“静态方法”。


class Foo {
 static classMethod() {
  return 'hello';
 }
}
Foo.classMethod() // 'hello'
var foo = new Foo();
foo.classMethod()

需注意,若静态方法中包含 this 关键字,该 this 指向的是类本身,而非实例。此外,父类的静态方法可以被子类继承。


class Foo {
 static classMethod() {
  return 'hello';
 }
}
class Bar extends Foo {
}
Bar.classMethod() // 'hello'

在上述代码中,父类 Foo 包含一个静态方法,子类 Bar 可以调用该方法。

静态方法同样可以通过 super 对象进行调用。


class Foo {
 static classMethod() {
  return 'hello';
 }
}
class Bar extends Foo {
 static classMethod() {
  return super.classMethod() + ', too';
 }
}
Bar.classMethod() /

感兴趣的用户可使用在线 HTML/CSS/JavaScript 代码运行工具:http://tools.jb51.net/code/HtmlJsRun 测试上述代码的运行效果。

如需了解更多 JavaScript 相关内容,可查看本站专题:《JavaScript 操作 DOM 技巧总结》、《JavaScript 页面元素操作技巧总结》、《JavaScript 事件相关操作与技巧大全》、《JavaScript 查找算法技巧总结》、《JavaScript 数据结构与算法技巧总结》、《JavaScript 遍历算法与技巧总结》及《JavaScript 错误与调试技巧总结》。

希望本文所述的 JavaScript 程序设计内容能对读者有所帮助。

作者最新文章