JavaScript属性查找沿原型链逐层向上,从实例自身开始,若无则通过__proto__访问父原型,直至Object.prototype.__proto__为null;读取可继承,写入只作用于当前对象。

JavaScript 中属性查找靠的是原型链的逐层向上搜索,不是一次性跳到顶层,而是“自己没有就问爸爸,爸爸没有就问爷爷”,直到找到或确认没人有。
属性查找从实例自身开始
每次访问对象属性(比如 obj.name 或 obj.method()),引擎第一件事是检查这个对象自身是否拥有该属性(包括通过 this.name = ... 或 Object.defineProperty 定义的自有属性)。如果存在,直接返回,不继续查。
找不到就顺着 __proto__ 向上找
如果实例上没这个属性,引擎会查看它的 __proto__(即构造函数的 prototype),在那个对象上查找;还找不到,就再查那个对象的 __proto__,依此类推。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 普通对象(如 const obj = {})的 __proto__ 指向 Object.prototype
- 函数对象的 __proto__ 指向 Function.prototype,而后者又指向 Object.prototype
- Object.prototype.__proto__ 的值是 null,这是整个链的终点
查到就停,查不到就返回 undefined
一旦某一层原型上找到了匹配的属性(哪怕是继承来的方法),查找立即终止并返回结果;如果一直查到 null 还没找到,最终结果就是 undefined。不会报错,也不会跳过或默认补值。
立即学习“Java免费学习笔记(深入)”;
注意:写操作不走原型链
给对象赋值属性(如 obj.x = 1)永远只在实例自身添加或修改,哪怕原型链上已有同名属性。也就是说:
– 读取时可能跨层级查找
– 写入时永远只作用于当前对象

















