最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JavaScript 原型链属性查询算法:如何描述才准确?
时间:2026-06-17 09:35:58 编辑:袖梨 来源:一聚教程网
JavaScript原型链属性查询从当前对象自有属性开始查找,未命中时沿[[Prototype]]链单向向上遍历至null;自有属性包括不可枚举属性,屏蔽会阻止继续查找,delete可暴露原型同名属性。
JavaScript 原型链属性查询,本质是沿着对象的 [[Prototype]] 链向上逐级查找,直到找到匹配属性名,或到达原型链末端(null)仍未找到,返回 undefined。
从当前对象开始,不跳过自有属性
查询始终先检查对象自身的属性(包括可枚举和不可枚举的),使用 Object.prototype.hasOwnProperty 或 Object.getOwnPropertyNames 可判断是否为自有属性。只有未命中时,才继续查原型。
沿 [[Prototype]] 链单向向上遍历
每个对象内部都有一个隐式原型指针 [[Prototype]](可通过 Object.getPrototypeOf(obj) 或非标准但广泛支持的 obj.__proto__ 访问)。引擎按此链依次访问上一级原型对象,不会横向或回溯。
- 函数对象的
[[Prototype]]指向Function.prototype - 普通对象默认指向
Object.prototype -
Object.prototype的[[Prototype]]是null,链在此终止
属性描述符影响读取行为,但不改变查询路径
即使属性被定义为 enumerable: false 或 configurable: false,只要存在且可读(writable 或 get 存在),仍能被正常访问。查询算法只认属性名是否存在,不区分描述符细节。
立即学习“Java免费学习笔记(深入)”;
注意:for...in 和 Object.keys() 受 enumerable 控制,但这属于枚举规则,与属性查询算法本身无关。
屏蔽(shadowing)是常见干扰点
当子对象自身添加了同名属性,会“遮蔽”原型上的同名属性。查询时优先返回子对象的值,不会继续向上找——这不是覆盖,而是停止查找。删除子对象该属性后,原型上的同名属性才会重新可见。
-
delete obj.prop删除自有属性后,可能暴露原型链上的同名属性 - 用
Object.defineProperty设置writable: false不阻止遮蔽,只限制修改
相关文章
- 魔神英雄传手游官网在哪下载 最新官方下载安装地址 07-11
- 魔神英雄传手游好玩吗 魔神英雄传手游玩法简述 07-11
- 《云之国》肉鸽模式初战记录 07-11
- 伊莫图鉴如何分享 07-11
- 风之痕迹骑士勋章材料如何获得 07-11
- 明日方舟终末地怎样实现干员养成与配队选择 07-11