constructor属性不参与参数传递,仅用于标识构造函数;参数传递由new调用和继承方式决定:原型链继承中父类构造函数提前执行无法动态传参,构造函数继承通过call/apply实现动态传参,组合继承中constructor仅修复原型链标识。

constructor 本身不负责参数传递
constructor 是函数对象的一个属性,指向创建该实例的构造函数。它本身不参与参数传递逻辑,也不自动转发参数。真正承担参数传递任务的是 调用构造函数的方式 和 继承实现机制。比如 new Parent(name, age) 中的 name、age 是传给 Parent 函数体执行用的;而子类如何让这些参数到达父类,取决于你采用哪种继承方案。
原型链继承中 constructor 与参数传递无关
在纯原型链继承里(Child.prototype = new Parent()),父类构造函数会在设置原型时立即执行一次,此时无法接收子类实例化时传入的参数:
- Parent 构造函数被调用发生在 Child.prototype 赋值阶段,和 new Child() 动作完全分离
- 即使写成 Child.prototype = new Parent('default'),这个 'default' 是固定值,无法随每个 new Child(name) 动态变化
- constructor 属性此时只是用于标识原型归属(如 Child.prototype.constructor === Child),对传参无作用
构造函数继承中靠 call/apply 实现参数传递
真正支持动态传参的是在子类构造函数体内显式调用父类构造函数,并用 call 或 apply 绑定 this 和参数:
- Parent.call(this, name, age) —— 把 this 指向当前子类实例,同时把 name、age 作为实参传入 Parent 函数体
- 这一步和 constructor 属性无关,但它是解决“子类实例化时向父类传参”问题的核心操作
- 此时父类的实例属性(包括引用类型)会被复制到子类实例上,避免共享问题
组合继承中 constructor 的角色是修复原型链标识
组合继承包含两步:构造函数继承(传参) + 原型链继承(复用方法)。其中 constructor 只在第二步起标识作用:
- Child.prototype = Object.create(Parent.prototype) 建立方法继承链
- 紧接着必须写 Child.prototype.constructor = Child,否则 child instanceof Child 会为 false,且 console.dir(child) 显示 constructor 指向 Parent
- 这个赋值不参与任何参数流转,纯粹是维护原型链的语义正确性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











