JavaScript中的类是构造函数的语法糖,基于原型机制,声明即函数,实例方法挂载在prototype上,支持constructor、static、getter/setter等特性。
JavaScript 中的 类(class) 是一种定义对象模板的语法形式,本质是构造函数的语法糖——它不改变底层原型机制,但让面向对象写法更清晰、更接近传统语言(如 Java、C++)的风格。
ES6 的 class 内部依然基于原型(prototype)工作。声明一个类,等同于定义一个函数;用 new 实例化,和调用构造函数完全一致:
typeof MyClass 返回 "function"
MyClass === MyClass.prototype.constructor 为 true
MyClass.prototype 上类必须用 class 关键字声明,至少隐式或显式包含一个 constructor 方法:
constructor,系统会自动添加空的 constructor() {}
this 指向新创建的实例"use strict"
示例:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
return `Hello, I'm ${this.name}`;
}
}
const p = new Person('Alice', 25);
p.greet(); // "Hello, I'm Alice"
除了基础结构,ES6 类支持多种实用特性:
static 声明,只能通过类名调用,不能被实例访问get 和 set 定义计算属性或带校验的赋值逻辑for...in 或 Object.keys() 中ReferenceError
例如带校验的 setter:
class User {
constructor(name) {
this._name
= name;
}
get name() {
return this._name.toUpperCase();
}
set name(value) {
if (value.length < 2) throw new Error('Name too short');
this._name = value;
}
}
类不是万能的,有几条硬性规则要遵守:
new 调用,直接执行会报错:MyClass() ❌function 关键字写方法体,也不用逗号分隔方法let x = 1),只能写方法、constructor、static、get/set
基本上就这些。用熟了你会发现,它让原型继承更可读,但底层逻辑一点没变。