Object.getPrototypeOf是获取对象直接原型的标准安全方法,返回其[[Prototype]]指向的对象;可逐级遍历原型链定位方法来源,需检查null终止循环,配合hasOwnProperty区分自有与继承属性。
Object.getPrototypeOf 是 JavaScript 中查看对象直接原型的可靠方法,比 __proto__ 更规范、更安全,特别适合在调试原型链时定位继承关系和方法来源。
每个对象(除 null)都有一个直接原型,Object.getPrototypeOf(obj) 就是获取这个原型对象。它返回的是该对象内部 [[Prototype]] 指向的那个对象,也就是 obj.__proto__ 的标准替代写法。
Object.prototype
Array.prototype
Function.prototype
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 —— 这是所有原型链的终点。调用 Object.getPrototypeOf(Object.prototype) 返回 null,再往上就报错。
current === null 避免无限循环null 或 undefined 调用该方法,会抛出 TypeErrorprototype,但仍有原型(Function.prototype),可用 Object.getPrototypeOf 查看不复杂但容易忽略。