JavaScript中构造函数的constructor属性默认指向自身,通过prototype对象自动设置;实例本身无该属性,需经__proto__继承访问;重写prototype会丢失constructor,需手动修复;箭头函数无prototype,class的constructor不可写。

JavaScript 中构造函数的 constructor 属性默认指向创建该实例的构造函数,这是通过原型链自动设置的——关键在于每个函数的 prototype 对象上,会有一个默认的 constructor 属性,它引用该函数本身。
构造函数 prototype 上的 constructor 是源头
当你定义一个函数(如 function Person() {}),JavaScript 引擎会自动为它的 prototype 属性创建一个对象,并把该对象的 constructor 指向这个函数:
-
Person.prototype.constructor === Person→ true - 这个链接不是实例自己拥有的,而是从原型(
__proto__)继承来的 - 所以所有
new Person()创建的实例,都能通过原型链访问到这个constructor
实例的 constructor 来自原型,不是自身属性
用 new Person() 创建的实例对象本身没有 constructor 属性,它只是沿着 __proto__ 找到 Person.prototype,再取上面的 constructor:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
const p = new Person();-
p.constructor === Person→ true(但'constructor' in p是 false) -
p.hasOwnProperty('constructor')→ false
手动修改 prototype 时容易丢失 constructor
如果直接给构造函数的 prototype 赋值一个新对象(比如用字面量重写),原来的 constructor 就会丢失:
-
Person.prototype = { say() { } };→ 此时Person.prototype.constructor指向Object,不再是Person - 修复方式:赋值后手动恢复:
Person.prototype.constructor = Person; - 更安全的做法是用
Object.defineProperty设置constructor并设为不可枚举,避免干扰for...in
箭头函数和 class 声明中的 constructor 行为
箭头函数没有 prototype,因此不能当构造函数使用,也没有 constructor 属性可谈;而 class 是语法糖,其内部仍基于原型,class A {} 的 A.prototype.constructor 同样指向 A,且不可写(严格模式下赋值无效)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










