ES6的class是语法糖,不改变原型机制,仅封装写法。它自动处理prototype赋值、__proto__链接及继承关系,使代码更简洁,但运行时仍基于原型链。

ES6 的 class 语法本身不封装原型链,而是用更简洁的写法掩盖了原型链的存在。它没有消除原型机制,只是把底层基于 prototype 和 __proto__ 的操作自动完成,让开发者不用手动写 Person.prototype.method = ... 这类代码。
class 声明自动建立原型关系
当你写:
class Person {
constructor(name) {
this.name = name;
}
sayHi() {
return `你好,${this.name}`;
}
}
JavaScript 引擎会自动做三件事:
- 创建构造函数
Person,并设置其prototype对象 - 把
sayHi方法挂到Person.prototype上(不是实例上) - 确保每个实例的
__proto__指向Person.prototype
也就是说,new Person('张三') 的原型链仍是:
实例 → Person.prototype → Object.prototype → null
静态方法和继承也走原型链
static 方法看似“属于类”,其实它被加在构造函数本身上(即 Person.sayHello = function(){...}),而构造函数本身也是对象,它也有自己的原型(Function.prototype)。extends 更是直接操作原型链:子类的 prototype.__proto__ 指向父类的 prototype,形成标准的原型继承链。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
封装的是写法,不是机制
class 没有改变 JavaScript 的对象模型,它只是语法糖。真正的封装体现在:
立即学习“Java免费学习笔记(深入)”;
- 把构造逻辑、实例方法、静态方法、getter/setter 写在一处,结构清晰
- 隐藏了
prototype赋值、Object.setPrototypeOf等底层操作 - 配合
private #field(ES2022+)可真正限制访问,这是传统 prototype 方式做不到的
换句话说,class 封装的是人的编码复杂度,而不是运行时的原型链行为。

















