JavaScript 中原型链中属性访问顺序的标准化逻辑

JavaScript原型链属性访问顺序严格固定:先查实例自身,再沿__proto__逐级向上至Object.prototype,最终到null终止;实例属性(如this.name、类字段)优先级最高,会遮蔽原型链上同名属性;查找只依赖__proto__链,不涉及constructor等其他属性;所有普通对象原型链终点均为Object.prototype→null。

javascript 中原型链中属性访问顺序的标准化逻辑

JavaScript 中原型链属性访问顺序是严格固定的:先查实例自身,再逐级沿 __proto__ 向上查找,直到 Object.prototype,最终到 null 停止。这不是推导出来的逻辑,而是引擎运行时真实发生的引用跳转路径。

查找起点永远是实例自身

无论属性是数据、方法还是 getter,访问时第一步永远检查对象自身是否拥有该属性(即 hasOwnProperty 级别判断)。

  • 有就直接返回,不继续向上找
  • 哪怕原型链上同名属性更早定义、更“权威”,也会被实例属性遮蔽
  • this.name = 'x'、类字段 name = 'x'、构造函数里赋值的 this.xxx,都属于实例属性,优先级最高

向上跳转只依赖 __proto__ 链

没找到就跳到当前对象的 __proto__ 所指对象,再重复查找——这个过程不看构造函数名、不看 constructor、不走任何捷径。

  • cat.__proto__ === Cat.prototype 是引擎强制设置,恒成立
  • Cat.prototype.__proto__ === Object.prototype,因为 Cat.prototype 是普通对象,由 Object 构造
  • Object.prototype.__proto__null,链在此终止

多层继承时路径自然延长

Dog.prototype = new Cat()dog 的查找路径就变成:dog → Cat实例 → Cat.prototype → Object.prototype → null

立即学习“Java免费学习笔记(深入)”;

  • 中间那个 Cat实例 是普通对象,它自己的 __proto__ 指向 Cat.prototype
  • 遮蔽只影响查找是否提前结束,不改变链本身结构
  • 删除实例属性后,查找自动恢复整条路径

终点明确且唯一

所有普通对象的原型链终点都是 Object.prototype,再往上就是 null。找不到就返回 undefined,不会报错。

  • 数组、函数、日期等内置对象也遵循同一规则,只是它们的 __proto__ 指向各自的原型(如 Array.prototype),但最终都会连到 Object.prototype
  • 静态方法查的是 Function.prototype 链,和实例原型链分开,不混用

文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/shoujipingce/123633.html

进程优先级调整实战:使用ionice平衡IO与CPU资源
上一篇 2026-07-01 12:00
下一篇 2026-07-01 12:13

相关推荐