JS中class是ES5构造函数+原型链的语法糖,constructor对应构造函数本体,实例方法挂载prototype实现共享,静态成员挂载构造函数自身,extends重连Student.prototype.__proto__与Student.__proto__以分别继承实例与静态成员。

JS 中 class 不是新机制,而是对 ES5 构造函数 + 原型链的封装写法。拆解它,关键不是“替换”,而是看清它每一行语法在原型体系里对应哪一步操作。
constructor 对应构造函数本体
class Person { constructor(name) { this.name = name; } } 等价于:
- 定义一个普通函数
function Person(name) { this.name = name; } - 这个函数自动拥有
Person.prototype.constructor === Person - 调用
new Person('张三')时,执行的就是该函数体,初始化实例属性
实例方法默认挂载到 prototype 上
class Person { sayHi() { return 'Hi'; } } 实际效果和下面完全一致:
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
Person.prototype.sayHi = function() { return 'Hi'; };- 所有
new Person()创建的实例,通过__proto__链都能访问到sayHi - 方法不重复创建,共享在原型上——这是原型复用的核心价值
静态成员走的是构造函数自身的 __proto__ 链
class Person { static walk() { return 'walking'; } } 的底层逻辑是:
Person.walk = function() { return 'walking'; };- 子类
class Student extends Person的构造函数Student.__proto__ === Person,所以能直接继承Student.walk() - 静态查找不碰
prototype,只沿__proto__向上:Student → Person → Function → Object
extends 和 super 的原型链重连动作
class Student extends Person 并非简单复制,而是做了两件关键原型操作:
- 让
Student.prototype.__proto__ = Person.prototype,保证实例方法可继承 - 让
Student.__proto__ = Person,保证静态成员可继承(这点和普通函数不同) -
super()在子类constructor中,本质就是调用Person.call(this, ...),完成父类实例属性初始化










