寄生组合式继承灵活性强,体现在参数传递自由、原型动态扩展、实例属性与方法边界清晰三方面,且被ES6 class语法采纳为底层实现。

寄生组合式继承的灵活性非常强,主要体现在对参数传递、原型扩展和实例控制三方面的天然支持。
支持向父类构造函数传参
子类在调用 Parent.call(this, ...args) 时,可以自由传入任意参数,父类初始化逻辑完全可控。比如:
- 父类
Person(name, age)接收两个参数 - 子类
Student(name, age, grade)可只传前两个给父类,第三个归自己用 - 不同子类可传不同参数组合,无需修改父类结构
父类原型方法可动态增删
因为子类原型是通过 Object.create(Parent.prototype) 构建的,它与父类原型保持“引用关系”而非“快照”。这意味着:
- 后续在
Parent.prototype上新增方法(如Parent.prototype.sayHello = ...) - 所有已创建和将创建的子类实例都能立即访问该方法
- 无需重新设置子类原型或重建实例,继承关系实时同步
实例属性与共享方法边界清晰
每个子类实例独享构造函数中定义的属性(如 this.id = Date.now()),而方法全部复用父类原型上的函数引用。这种分离带来实际灵活性:
- 避免数组、对象等引用类型被多个实例意外共享
- 子类可覆盖父类方法,也可在原型上添加新方法,互不干扰
- 配合
instanceof和isPrototypeOf判定准确,利于类型判断和多态处理
现代 class 语法的 extends 就是它的语法糖,说明这种灵活性已被语言和引擎深度接纳。不复杂但容易忽略。

















