构造函数的prototype属性本身就是其实例对象的原型对象,即实例的__proto__直接指向它;每个函数创建时自动拥有prototype属性,默认含constructor指向自身;new调用时引擎将实例__proto__设为该prototype。

构造函数的 prototype 属性**本身就是**它创建的实例对象的原型对象(即实例的 __proto__ 指向的位置),不需要“通过它去找到”——它直接就是。
prototype 是构造函数的一个固定属性
每个函数(包括构造函数)在创建时,JavaScript 引擎会自动为其添加一个 prototype 属性。这个属性是一个普通对象,且默认带有 constructor 属性,指向该构造函数本身。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
-
F.prototype是一个对象,比如{ constructor: F } - 这个对象就是所有
new F()实例的原型(即instance.__proto__ === F.prototype) - 它不是“查找路径”,而是明确指定的原型来源
实例如何关联到 prototype
当你用 new 调用构造函数时,引擎会自动把新对象的内部属性 [[Prototype]](可通过 __proto__ 访问)设置为该构造函数的 prototype 值。
function Person(name) {
this.name = name;
}
const p = new Person('Alice');
console.log(p.__proto__ === Person.prototype); // true
prototype 不是原型链的终点
Person.prototype 自身也是一个普通对象,它的 __proto__ 指向 Object.prototype,再往上是 null。所以完整的原型链是:
-
p.__proto__→Person.prototype -
Person.prototype.__proto__→Object.prototype -
Object.prototype.__proto__→null
注意几个常见误区
-
Person.prototype和Person.__proto__完全不同:前者是实例的原型,后者是函数对象(作为Function的实例)的原型,通常等于Function.prototype - 箭头函数没有
prototype属性(不可被new调用) - 修改
Constructor.prototype会影响**之后**创建的实例;已存在的实例不受影响(因为它们的__proto__已绑定)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










