使用构造函数创建的对象,其原型默认指向该构造函数的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。
所有构造函数都遵循同一规则
不只是自定义函数,内置构造函数也一样:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
({}).__proto__ === Object.prototype[].__proto__ === Array.prototypefunction(){}.__proto__ === Function.prototypenew Date().__proto__ === Date.prototype
原型链终点是 Object.prototype
每个构造函数的 prototype 对象本身也是对象,它也有自己的原型:
立即学习“Java免费学习笔记(深入)”;
-
Person.prototype.__proto__指向Object.prototype; -
Object.prototype.__proto__是null,这是整个原型链的终点。
注意:不是指向构造函数本身
常见误解是“实例的原型等于构造函数”。其实不是——
- 实例的原型是
构造函数.prototype,不是构造函数; -
obj.constructor虽然通常指向Person,但那是从Person.prototype.constructor继承来的,不是原型本身的值。

















