javascript继承构造函数的核心是让子类实例执行父类构造逻辑以获得独立实例属性,主要方式包括:①借用构造函数(call/apply);②组合继承(构造函数+原型链);③寄生组合继承(推荐);④es6 class extends(日常首选)。

JavaScript中继承构造函数,核心是让子类在创建实例时能执行父类构造逻辑,从而获得父类定义的实例属性(比如 this.name、this.colors),同时避免引用类型属性被多个实例共享。
借用构造函数(call/apply)
这是最直接继承构造函数的方式:在子类构造函数内部,用 Parent.call(this, ...args) 调用父类构造函数。
- 每个子类实例都拥有独立的一份父类实例属性,不会互相影响
- 支持向父类传参(如
new Child('Alice', 25)) - 只能继承父类构造函数内定义的属性和方法,无法访问父类原型上的方法(如
Parent.prototype.sayHi)
组合继承(构造函数 + 原型链)
把借用构造函数和原型链继承结合起来,兼顾属性私有化与方法复用。
- 用
Parent.call(this, ...)继承实例属性 - 用
Child.prototype = new Parent()或更优的Object.create(Parent.prototype)继承原型方法 - 需手动修复
constructor指针:Child.prototype.constructor = Child - 缺点是父类构造函数会被调用两次(一次在
new Parent(),一次在Parent.call)
寄生组合继承(推荐手动实现)
解决组合继承中父构造函数调用两次的问题,是 ES6 class 底层采用的方式。
- 用
Object.create(Parent.prototype)设置子类原型,不执行父类构造函数 - 仍用
Parent.call(this, ...)初始化实例属性 - 只调用一次父类构造函数,语义清晰、性能更好
ES6 class extends(日常首选)
语法糖,写法简洁,底层仍是寄生组合继承机制。
- 子类构造函数中必须先调用
super(...),否则无法使用this - 自动绑定原型链,自动修复
constructor,无需手动处理 - 可直接继承静态方法、getter/setter、以及父类原型方法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











