最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JavaScript 中通过 Object.getPrototypeOf 进行原型链调试
时间:2026-07-09 11:41:52 编辑:袖梨 来源:一聚教程网
Object.getPrototypeOf是获取对象直接原型的标准安全方法,返回其[[Prototype]]指向的对象;可逐级遍历原型链定位方法来源,需检查null终止循环,配合hasOwnProperty区分自有与继承属性。
Object.getPrototypeOf 是 JavaScript 中查看对象直接原型的可靠方法,比 __proto__ 更规范、更安全,特别适合在调试原型链时定位继承关系和方法来源。
看清对象的“上一级”是谁
每个对象(除 null)都有一个直接原型,Object.getPrototypeOf(obj) 就是获取这个原型对象。它返回的是该对象内部 [[Prototype]] 指向的那个对象,也就是 obj.__proto__ 的标准替代写法。
- 对普通对象,通常返回
Object.prototype - 对数组,返回
Array.prototype - 对函数,返回
Function.prototype - 对用 class 创建的实例,返回对应类的
prototype
逐级遍历原型链定位方法来源
当不确定某个方法来自哪一层原型时,可以用循环配合 Object.getPrototypeOf 向上追溯:
function tracePrototype(obj, methodName) { let current = obj; while (current) { if (current.hasOwnProperty(methodName)) { console.log(`Found ${methodName} on:`, current); break; } current = Object.getPrototypeOf(current); }}
例如 tracePrototype([1,2], 'map') 会输出 Array.prototype,说明 map 定义在此处。
立即学习“Java免费学习笔记(深入)”;
区分“自有属性”和“继承属性”
结合 hasOwnProperty 和 Object.getPrototypeOf,能清晰判断属性是否属于对象自身:
-
obj.hasOwnProperty('x')→ 属性是否在obj自身上 -
'x' in obj→ 是否在obj或其任意原型上 -
Object.getPrototypeOf(obj).hasOwnProperty('x')→ 是否在直接原型上
这种组合常用于调试意外覆盖或缺失的方法。
注意 null 原型链终点
原型链最终会到达 null —— 这是所有原型链的终点。调用 Object.getPrototypeOf(Object.prototype) 返回 null,再往上就报错。
- 务必在循环中检查
current === null避免无限循环 - 不要对
null或undefined调用该方法,会抛出 TypeError - 箭头函数没有
prototype,但仍有原型(Function.prototype),可用Object.getPrototypeOf查看
不复杂但容易忽略。
相关文章
- 蚂蚁庄园今日答案(每日更新)2026年1月16日 07-17
- 蚂蚁庄园今日正确答案1月16日 07-17
- 死亡搁浅2全部34个武器的解锁方法条件是什么 07-17
- 星塔旅人全部角色特殊回忆触发条件方式合集 07-17
- Palia帕利亚1.12至1.18村民需求物品清单大全 07-17
- 舒舒服服小岛时光全部魔法种子分布详情图 07-17