ES6 的 class 是构造函数与原型链的语法糖,编译为具名函数表达式,含 _classCallCheck 检查;实例属性挂实例、方法挂 prototype、静态方法挂构造函数;extends 通过两层 setPrototypeOf 实现继承,子类 constructor 必须首调 super()。

ES6 的 class 不是新继承模型,而是对构造函数 + 原型链的封装——它被编译为标准函数,并自动注入安全检查、原型绑定和继承链设置。真正执行时,没有“类对象”,只有函数、对象和 [[Prototype]] 链。
class 声明本质是函数表达式
虽然写法像类型声明,但 class Person{} 编译后等价于:
- 一个具名函数表达式(非函数声明),因此不提升,必须先声明后使用
- 函数体内自动插入
_classCallCheck(this, Person)检查,确保只能通过new调用 -
typeof Person返回"function",证实其函数本质
实例属性与方法的落点位置不同
看似统一写在 class 内部,实际分三类处理:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 构造函数中赋值的
this.xxx = ...→ 直接挂载到实例对象上(如this.name) - 类体中定义的普通方法(如
sayHello(){})→ 通过_createClass绑定到Person.prototype上,供所有实例共享 - 静态方法(
static method(){})→ 绑定到构造函数自身(Person.method),不进入原型链
extends 继承靠两层 Object.setPrototypeOf 实现
class Child extends Parent 编译后核心动作是:
立即学习“Java免费学习笔记(深入)”;
-
Object.setPrototypeOf(Child, Parent):让子类能访问父类静态成员(如Parent.staticMethod) -
Object.setPrototypeOf(Child.prototype, Parent.prototype):使子类实例能沿原型链访问父类原型方法(如child.sayHello()) -
super()在子构造函数中实际调用Parent.call(this, ...),完成实例属性初始化
constructor 不是必需,但 super() 在子类中不可省略
若子类显式声明了 constructor,就必须第一行调用 super():
- 否则报错:
Must call super constructor in derived class before accessing 'this' - 因为子类的
this必须由父类构造函数初始化,才能保证原型链正确挂载 - 即使父类无显式 constructor,JS 也会提供默认空构造函数,
super()仍需调用

















