ES6继承非语法糖,而是运行时机制的根本调整:this由super()创建而非子类构造函数;原型链在定义阶段自动绑定;能继承原生构造器内部槽和语义约束;static方法和私有字段继承更严格。

ES6 继承和 ES5 原型继承的底层原理差异,核心在于 this 对象的创建时机与归属逻辑不同,不是语法糖那么简单,而是运行时机制的根本调整。
子类实例的 this 是谁创建的?
ES5 中,this 由子类构造函数自己创建,再通过 Parent.call(this) 把父类属性“搬运”过去;即使漏掉这一步,实例仍能生成(只是缺少父类属性)。
ES6 中,this 由父类构造函数(super())创建并初始化,子类 constructor 本质是“加工者”,不是“创建者”。不调用 super() 就访问 this,直接抛出 ReferenceError —— 因为此时 this 还不存在。
原型链建立的时机和方式不同
ES5 需手动设置:Child.prototype = Object.create(Parent.prototype),再修正 constructor 指向,整个过程是“事后补链”,容易出错或遗漏。
ES6 的 extends 在类定义阶段就自动完成原型链绑定:Child.__proto__ === Parent(静态继承),Child.prototype.__proto__ === Parent.prototype(实例方法继承)。这是引擎强制保障的,不可绕过。
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
继承目标不止是实例属性,还包括内部状态和语义约束
ES6 继承能正确继承原生构造器(如 Array、Error、Map)的内部槽(internal slots),例如 ArraySubclass extends Array 实例真正具备数组的 length 行为和内置方法支持;ES5 无法做到这点,强行模拟会丢失关键行为。
ES6 强制 super() 调用,不只是为了属性,更是为了触发父类内部初始化逻辑(比如 Error 设置 stack,Promise 初始化状态机),这是语义层面的继承保障。
静态成员和私有字段的继承规则更严格
ES6 中,static 方法自动继承:Child.staticMethod() 可直接调用父类 static 方法(通过 Child.__proto__ 链);ES5 需手动复制或代理,无统一机制。
ES6 支持私有字段(#field)的继承:子类可访问从父类继承的私有字段(只要在父类中定义且未被遮蔽),而 ES5 完全没有语言级私有机制,所有“私有”都靠闭包模拟,无法跨构造函数共享或继承。










