JavaScript中class和extends是语法糖,底层基于原型链和构造函数机制运作,不复制方法而通过原型指向实现复用;子类原型指向父类原型,super()安全绑定this并挂载父类自有属性,静态成员通过构造函数__proto__链接继承,全程无拷贝,仅委托查找。

JavaScript 中 class 和 extends 是语法糖,底层完全基于原型链和构造函数机制运作,并不真正“复制”方法,而是通过调整原型指向实现行为复用。
子类原型指向父类原型
当写 class Child extends Parent 时,引擎自动执行类似以下逻辑:
-
Child.prototype.__proto__ = Parent.prototype—— 这是关键一步,让子类实例能沿原型链查找到父类原型上的方法(如Parent.prototype.sayHello) - 这条链最终通向
Object.prototype,终点为null,构成标准原型查找路径 - 方法本身并未被拷贝或复制,所有子实例共享同一份函数引用,节省内存
构造函数绑定与 super 调用
super() 不是简单调用父构造函数,而是一套协同机制:
- 在
Child构造函数中,super()确保先初始化this(由 JS 引擎控制),再执行父类构造逻辑 - 引擎会把
this绑定到当前子实例上,并将父类定义的自有属性(如this.name、this.items = [])挂载过去 - 这一步本质上是
Parent.call(this, ...args)的安全封装,避免手动调用导致this指向错误
静态成员继承靠构造函数链接
静态方法和属性也能被继承,靠的是另一条链:
立即学习“Java免费学习笔记(深入)”;
-
Child.__proto__ = Parent—— 子类构造函数直接继承父类构造函数 - 因此
Child.create()可以访问Parent.create(),无需额外操作 - 这种关系独立于实例原型链,属于“构造函数层级”的委托
没有方法复制,只有委托查找
整个过程不涉及任何属性或方法的深拷贝、浅拷贝或遍历赋值:
- 子类原型对象(
Child.prototype)自身可能为空,但它能通过__proto__找到Parent.prototype - 调用
child.sayHello()时,JS 引擎按规则查找:自身 →Child.prototype→Parent.prototype→ …… - 哪怕父类原型后续被动态修改(如新增方法),所有已有子实例立刻可访问,体现原型链的动态性


















