原型对象是函数的共享工具箱,__proto__是对象指向其原型的隐式链接,原型链是通过__proto__逐级向上查找属性和方法的路径。

原型对象和原型链,说白了就是 JavaScript 里“东西从哪儿来”的查找规则。
原型对象:函数自带的“共享工具箱”
每个函数(非箭头函数)一创建,就自动配一个 prototype 属性,它指向一个普通对象——这就是原型对象。
这个对象就像一个“公共工具箱”,你往里面放方法或属性,所有用这个函数 new 出来的实例都能直接用,不用每人复制一份。
- 比如
function Person(name) { this.name = name; },Person.prototype.sayHi = function() { console.log('Hi!'); }; - 那么
const p1 = new Person('Alice');就能直接调用p1.sayHi(),虽然p1自身没有这个方法 - 因为
p1.__proto__指向的就是Person.prototype,引擎会自动去那儿找
__proto__:每个对象都有的“上一级线索”
所有对象(包括函数、数组、实例)内部都有一个隐式链接,叫 [[Prototype]],浏览器通常用 __proto__ 暴露给你看。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
它不是用来设置的,而是告诉你:“我的上一级原型是谁”。
-
p1.__proto__ === Person.prototype✅ -
Person.__proto__ === Function.prototype✅(因为函数本身也是 Function 的实例) -
Person.prototype.__proto__ === Object.prototype✅(因为原型对象本质是普通对象)
原型链:一层找不到,就往上翻“家谱”
当你访问 p1.toString(),而 p1 自身没有这个方法时,JavaScript 不会立刻报错,而是按这条路线查:
- 先查
p1自己有没有toString - 没有 → 去
p1.__proto__(即Person.prototype)里找 - 还没找到 → 再去
Person.prototype.__proto__(即Object.prototype)里找 - 找到了!
Object.prototype.toString就是最终来源 - 如果一直查到
Object.prototype.__proto__(它的值是null),还没找到,就返回undefined
关键一句话收尾
原型对象是函数的“共享区”,__proto__ 是对象的“寻亲指针”,原型链就是靠这一串指针连起来的、自下而上的查找路径。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










