es6的extends本质仍是原型链继承,只是用class语法封装了底层细节:自动设置原型关系、强制调用super初始化、避免共享引用属性,并支持super调用父类方法和静态方法,instanceof验证依然有效。

ES6 的 extends 不是“替代”原型链,而是用更清晰的语法封装原型链——底层仍是原型链,只是你不用手动操作 prototype、constructor 或 call 了。
继承写法更直观,不用管原型链细节
传统方式要手动设置子类原型、修正 constructor、还要在子构造函数里调用 Parent.call(this, ...);而 class + extends 把这些逻辑收拢到固定结构里:
- 用
class Child extends Parent声明继承关系 - 子类构造函数中必须第一行写
super(...)(相当于自动执行Parent.call(this, ...)) - 方法自动挂到原型上,静态方法挂到类本身,无需手动赋值
Child.prototype.xxx = function(){}
实例属性不再共享,天然解决引用类型陷阱
ES5 原型链继承时,如果父类在构造函数外定义 this.colors = ['red'],所有子实例会共用同一个数组;而 extends 中每个子类实例都独立调用父类构造函数,所以:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
super(name)每次都会新建一份this.colors - 修改
child1.colors.push('green')不会影响child2.colors - 不需要再靠“组合继承”或“寄生组合”绕开这个问题
super 不只是调父类构造函数,还能调方法和静态方法
super 是 ES6 继承中的关键桥梁,它在不同上下文有不同作用:
- 在子类
constructor中:必须调用,且只能在this使用前执行 - 在实例方法中:
super.sayName()调用父类同名原型方法 - 在静态方法中:
super.sayHello()调用父类静态方法 - 注意:
super只能在 class 内部使用,普通函数里无效
instanceof 和原型链验证依然有效
虽然写法变了,但继承关系没变。你可以照常用:
-
child instanceof Child→true -
child instanceof Parent→true -
Child.prototype.__proto__ === Parent.prototype→true - 说明
extends本质还是把子类原型指向父类原型,只是帮你自动完成了这步
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










