ES6的class并未取代原型链继承,而是以更规范语法封装原型链;底层仍是原型链,自动处理constructor修正、prototype挂载和父类调用,确保实例属性独立,并统一super作为父类调用入口。

ES6 的 class 并没有真正“替代”原型链继承,而是用更规范、更安全的语法封装了原型链——底层仍是原型链,只是你不再需要手动操作 prototype、__proto__ 或反复调用 Parent.call(this)。
写法更简洁,逻辑更集中
传统原型链继承需多步手动设置:修正 constructor、用 Object.create() 挂载父类原型、在子构造函数中显式调用 Parent.call(this)。而 class 把这些收束到固定结构里:
- 用
class Child extends Parent一行声明继承关系 - 子类
constructor中第一句必须是super(...),自动完成父类实例初始化 - 所有实例方法直接写在
class内部,自动挂到Child.prototype上 - 静态方法写在
static关键字后,自动挂到构造函数本身
天然避免引用属性共享问题
原型链继承时,若父类在 prototype 上定义 this.colors = ['red'],所有子实例会共用同一数组;而 extends 确保每个子实例都独立执行一次父类构造函数:
-
super(name)每次都会新建一份实例属性,比如this.colors -
child1.colors.push('green')不会影响child2.colors - 无需再靠“寄生组合继承”绕开这个陷阱
super 是统一入口,支持多种调用场景
super 不只是调父类构造函数,它在不同上下文有明确语义:
立即学习“Java免费学习笔记(深入)”;
- 在子类
constructor中:super()等价于Parent.call(this, ...),且必须在访问this前调用 - 在实例方法中:
super.sayName()调用父类同名原型方法 - 在静态方法中:
super.sayHello()调用父类静态方法 -
super只能在class内部使用,普通函数中无效
验证方式没变,继承关系依然清晰
虽然语法变了,但对象底层结构和行为完全一致:
-
child instanceof Child→true -
child instanceof Parent→true -
Child.prototype.__proto__ === Parent.prototype→true - 属性查找仍沿
child → Child.prototype → Parent.prototype → Object.prototype链进行


















