es6 class继承与es5寄生组合继承均实现方法复用和属性隔离,但原型链构建不同:es6中child.prototype直接指向parent.prototype且自动修复constructor;es5需object.create(parent.prototype)并手动修复constructor;es6强制super()初始化this,es5靠parent.call(this)补属性;静态继承es6全自动,es5需显式设置。

ES6 class 继承和 ES5 寄生组合继承,最终都让子类实例能访问父类原型上的方法、实现属性隔离与方法复用,但原型链的构建方式和关键节点的指向逻辑有本质差异。
原型链起点:子类 prototype 的值不同
寄生组合继承中,子类的 prototype 是一个「干净的父类实例」(通过 Object.create(Parent.prototype) 或等效方式创建),它不带父类构造函数执行产生的实例属性,只继承父类原型;而 ES6 中,Child.prototype 是一个由引擎自动创建的对象,其 [[Prototype]] 直接指向 Parent.prototype,不是父类实例,也不含父类构造函数副作用。
- ES5 寄生组合:Child.prototype → new Parent() → Parent.prototype
- ES6 class:Child.prototype → Parent.prototype(一步直达)
constructor 属性的处理方式不同
寄生组合继承需手动修复 constructor 指向,否则 Child.prototype.constructor 会错误地指向 Parent;ES6 中 class 语法自动确保 Child.prototype.constructor === Child,无需额外操作。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- ES5 常见补救:
Child.prototype.constructor = Child - ES6 不需要干预,语言层强制保障
super() 调用影响 this 初始化时机
ES6 要求子类构造函数中必须调用 super(),且 this 在 super() 执行后才可用——此时 this 已被引擎绑定为子类实例,并沿原型链关联到 Child.prototype 和 Parent.prototype;ES5 寄生组合中没有该约束,this 由 new Child() 创建后直接使用,靠 Parent.call(this, ...) 补充实例属性。
- ES6:this 依赖 super() 初始化,原型链在 new 过程中已预置完成
- ES5:this 是空对象,靠手动 call 补属性,原型链靠 Object.create 显式设置
静态属性与方法的继承路径一致但机制隐含
两者都让 Child.__proto__ === Parent(即子类构造函数继承父类构造函数),从而支持静态方法继承。不过 ES5 需手动设置:Child.__proto__ = Parent 或用 Object.setPrototypeOf(Child, Parent);ES6 自动完成,且不可省略——即使子类没写 constructor,编译器也会注入默认构造器并调用 super()。
- 静态继承都走构造函数的 [[Prototype]] 链,非实例原型链
- ES5 需显式操作,ES6 全自动、强约束










