__proto__ 是对象指向其原型对象的内部链接,用于属性查找;prototype 是函数独有的共享模板对象,实例的 __proto__ 在 new 时被自动设为构造函数的 prototype,由此构成原型链。

理解 __proto__ 与原型对象的关系,关键在于抓住“谁指向谁”和“为什么这样设计”这两点。它不是一对对称属性,而是 JavaScript 实现对象继承的底层链接机制。
__proto__ 是对象身上的“查找入口”
__proto__ 是每个对象(除 null 和 undefined)都有的内部链接,规范中叫 [[Prototype]],它指向该对象的原型对象。这个指向决定了:当你访问一个对象没有的属性时,JS 引擎会顺着 __proto__ 去它的原型上找。
- 实例对象的
__proto__指向其构造函数的prototype对象 - 函数也是对象,所以函数也有
__proto__,它指向Function.prototype -
Object.prototype.__proto__是null,表示查找终点
prototype 是函数身上的“共享模板”
prototype 是函数独有的属性,它是一个普通对象,用来存放所有由该函数创建的实例可以共享的属性和方法。它本身不是原型链的一部分,而是被其他对象的 __proto__ 所指向的那个“原型对象”。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 只有函数有
prototype;普通对象、数组、日期等实例没有prototype属性(访问为undefined) -
Person.prototype就是new Person()创建出的所有实例共同的原型对象 - 这个对象默认带一个
constructor属性,指回原函数,形成可追溯关系
二者通过 new 操作符建立连接
当你用 new Fn() 创建实例时,JavaScript 引擎会自动完成一件事:把新对象的 __proto__ 设置为 Fn.prototype。这就是两者关系的源头。
立即学习“Java免费学习笔记(深入)”;
-
const obj = new Date()→obj.__proto__ === Date.prototype -
const arr = [](等价于new Array())→arr.__proto__ === Array.prototype -
const o = {}(等价于new Object())→o.__proto__ === Object.prototype
原型链就是 __proto__ 的逐级向上查找过程
原型链不是抽象概念,它是一条真实存在的、由 __proto__ 串联起来的路径。每次属性访问失败,就跳到当前对象的 __proto__ 上继续找,直到 Object.prototype,再往上就是 null。
-
obj.toString():先查obj自身 → 没有 → 查obj.__proto__(即Date.prototype)→ 没有 → 查Date.prototype.__proto__(即Object.prototype)→ 找到toString - 所有内置对象最终都连到
Object.prototype,所以能共用toString、valueOf等方法

















