使用构造函数创建的对象,其原型默认指向该构造函数的prototype属性;即obj.__proto__ === person.prototype,且所有构造函数(包括内置)均遵循此规则,原型链终点为object.prototype.__proto__ === null。

使用构造函数创建的对象,其原型默认指向该构造函数的 prototype 属性所引用的对象。
具体关系很明确
当你写 const obj = new Person() 时:
- 引擎会自动给
obj设置一个内部原型链接([[Prototype]]),在大多数环境中可通过obj.__proto__访问; - 这个
__proto__的值,就是Person.prototype; - 也就是说:
obj.__proto__ === Person.prototype为 true。
所有构造函数都遵循同一规则
不只是自定义函数,内置构造函数也一样:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
({}).__proto__ === Object.prototype[].__proto__ === Array.prototypefunction(){}.__proto__ === Function.prototypenew Date().__proto__ === Date.prototype
原型链终点是 Object.prototype
每个构造函数的 prototype 对象本身也是对象,它也有自己的原型:
-
Person.prototype.__proto__指向Object.prototype; -
Object.prototype.__proto__是null,这是整个原型链的终点。
注意:不是指向构造函数本身
常见误解是“实例的原型等于构造函数”。其实不是——
- 实例的原型是
构造函数.prototype,不是构造函数; -
obj.constructor虽然通常指向Person,但那是从Person.prototype.constructor继承来的,不是原型本身的值。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










