对象的__proto__指向其构造函数的prototype;prototype是函数独有的属性,__proto__是每个对象(含函数对象)都有的内部链接;new操作符自动建立该指向,形成查找链实现继承与复用。

核心联系就一句话:对象的 __proto__ 指向其构造函数的 prototype。
谁有 prototype?谁有 __proto__?
prototype 是函数独有的属性,一创建函数就自动存在(除了 bind 返回的函数);
__proto__ 是每个普通对象(包括函数对象本身)都有的内部链接,它不是标准写法但被广泛支持,标准方式是 Object.getPrototypeOf()。
这条指向关系是怎么建立的?
当你用 new Fn() 创建实例时,JavaScript 引擎会自动把新对象的 __proto__ 设置为 Fn.prototype。
这一步是隐式发生的,不需要手动写,是 new 操作符底层行为的一部分。
-
const p = new Person('小明')→p.__proto__ === Person.prototype为 true -
const arr = []→arr.__proto__ === Array.prototype为 true -
const fn = function() {}→fn.__proto__ === Function.prototype(因为函数也是对象,由 Function 构造)
为什么这个联系重要?
正是靠这个指向,才形成“查找链”:访问对象属性时,如果自身没有,就顺着 __proto__ 去构造函数的 prototype 上找;还没找到,就继续往上找它的 __proto__,直到 Object.prototype,最后到 null。
所以 prototype 是“共享方法的存放地”,__proto__ 是“通往共享地的路标”。两者配合,实现属性继承和方法复用。
一个容易忽略的细节
Function 本身是个函数,所以它有 prototype;同时它也是对象,所以它也有 __proto__。
而 Function.__proto__ === Function.prototype —— 这说明函数对象的原型就是它自己的 prototype,这是 JS 原型体系自洽的关键一环。











