如何用原型链与 Object.getPrototypeOf 获取对象原型
如何用原型链与 Object.getPrototypeOf 获取对象原型

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
在Ja vaScript的世界里,要获取一个对象的原型,最直接、最规范的方法就是调用 Object.getPrototypeOf()。不过,要真正理解它的价值,还得从Ja vaScript那套独特的原型链机制说起——每个对象内部都有一个隐式的 [[Prototype]] 链接,它就像一条看不见的线,指向了其构造函数的 prototype 对象。
Object.getPrototypeOf():标准且安全的取原型方式
这个方法的设计初衷,就是返回指定对象内部那个 [[Prototype]] 链接所指向的对象。它的优势非常明显:兼容性好,是ECMAScript标准的一部分,而且完全不受非标准的 __proto__ 属性被修改或屏蔽的影响。
来看看它在不同对象身上的表现:
- 对于普通对象,它返回的是
Object.prototype。 - 对于数组,它返回的是
Array.prototype。 - 对于函数,它返回的是
Function.prototype。 - 而对于通过
Object.create(null)创建的“纯净”对象,它则会返回null。
用代码验证一下,一目了然:
const obj = {};
console.log(Object.getPrototypeOf(obj) === Object.prototype); // true
const arr = [1, 2];
console.log(Object.getPrototypeOf(arr) === Array.prototype); // true
const F = function () {};
console.log(Object.getPrototypeOf(F) === Function.prototype); // true
原型链:一条由 __proto__ 串联的查找路径
原型链这个概念,可以说是Ja vaScript继承的基石。当你试图访问对象的一个属性时,如果对象自身没有,引擎不会就此放弃,而是会沿着那条内部的 [[Prototype]] 链一路向上查找,直到找到该属性,或者最终抵达链条的尽头——null。
每个对象的这条隐式链接,在其诞生之时就已确定:
- 字面量对象(比如
{})的原型,自然是Object.prototype。 - 数组字面量(比如
[])的原型是Array.prototype,而Array.prototype本身的原型又指向Object.prototype。 - 函数对象的原型是
Function.prototype,再往上,同样也指向Object.prototype。
想亲眼看看这条链?通过多次调用 Object.getPrototypeOf 就能轻松实现遍历:
const obj = { a: 1 };
let proto = Object.getPrototypeOf(obj);
console.log(proto === Object.prototype); // true
const arr = [];
proto = Object.getPrototypeOf(arr);
console.log(proto === Array.prototype); // true
proto = Object.getPrototypeOf(proto);
console.log(proto === Object.prototype); // true
警惕混淆:Object.getPrototypeOf 与 constructor.prototype 不是一回事
这里有个常见的误区需要特别注意。Object.getPrototypeOf(obj) 获取的是对象实例的原型,而 obj.constructor.prototype 则是试图通过对象的构造函数属性来反推原型。后者听起来合理,但实际上并不可靠,原因有三:
- 如果对象的
constructor属性被修改过(比如在重写prototype时没有同步更新constructor指向),结果就会出错。 - 箭头函数没有
prototype属性,因此通过obj.constructor.prototype访问会出问题。 - 使用
Object.create(null)创建的对象,压根就没有constructor这个属性。
所以,结论很明确:始终优先使用 Object.getPrototypeOf()。它是获取对象原型唯一规范且健壮的途径。
扩展技巧:用 isPrototypeOf() 检查关系更语义化
有时候,我们不仅仅是想获取原型,还想判断某个对象是否存在于另一个对象的原型链上。这时,使用 A.isPrototypeOf(B) 方法会比手动遍历链条清晰得多,意图也更明确。
const parent = { x: 1 };
const child = Object.create(parent);
console.log(parent.isPrototypeOf(child)); // true
console.log(Object.prototype.isPrototypeOf(child)); // true
console.log(Array.prototype.isPrototypeOf(child)); // false
对比一下反复调用 Object.getPrototypeOf 再进行比较的方式,isPrototypeOf() 显然更简洁,也更符合语义。这算是原型操作中一个非常实用的小技巧了。
相关攻略
在DNF的世界里,男大枪职业凭借其强大的火力输出备受玩家喜爱。而奥兹玛神话装备更是能让男大枪的实力得到质的飞跃。下面就来为大家介绍一下DNF男大枪奥兹玛神话排名。 排名靠前的神话装备 逆转结局 对于男大枪而言,逆转结局这件神话堪称顶级选择。它带来的技能伤害增幅极为显著,尤其是对核心输出技能的加成,效
洛克王国异色精灵孵化公式大全与获取攻略 在经典宠物养成游戏《洛克王国》中,异色精灵的孵化是许多玩家追求的核心玩法之一。这些拥有独特外观的精灵不仅极具收藏价值,更能显著提升你的队伍实力。为了帮助各位小洛克高效获得心仪的异色宠物,本文将系统性地整理并解析当前版本中已验证有效的异色精灵孵化公式,让你在培育
在《虚环》的角色搭配体系中,扇宝是一位定位精准的辅助型角色。她的核心优势在于,能够通过独特的技能机制为全队提供显著的攻击力加成,并在战斗节奏控制上发挥关键作用。无论是PVE副本推进还是PVP竞技对抗,她的实战价值都值得深入挖掘。本文将为您全面解析扇宝的技能机制与阵容搭配思路。 虚环扇宝技能介绍详解
《重返未来:1999》v3 6版本资源全解析:零氪到双卡,你能拿到多少抽? 《重返未来:1999》v3 6版本现已正式开启,全新活动与丰厚奖励正等待着各位司辰。无论是零氪玩家还是月卡党,最核心的问题无疑是:这个版本究竟能积累多少抽卡资源?不同氪金档位的收益差距有多大?本文将为你带来一份详尽的v3 6
洛克王国世界开服宠物强度榜:选对伙伴,开荒事半功倍 《洛克王国世界》开服的热潮还在持续,不少新晋训练师正沉浸在广阔的世界里。不过,面对琳琅满目的宠物,一个现实的问题摆在了面前:资源有限,先培养谁?如果选错了方向,不仅浪费宝贵的经验果和金币,可能连野外的小怪都打得磕磕绊绊。别担心,这份开服宠物强度排行
热门专题
热门推荐
比特币市场观察:站稳关键心理关口,上涨空间如何演绎? 比特币市场最近的表现,可以说给不少投资者吃了一颗“定心丸”。在经历了一段时期的震荡后,BTC价格稳稳地守在了110,000美元上方。这个位置,如今已被广泛视为一个关键的心理与技术支撑位,市场情绪也正从谨慎观望,逐步转向审慎乐观。 一、BTC上涨空
NEC与Anthropic达成战略合作,将Claude AI引入日本市场 4月25日,人工智能领域传来一则重磅消息。Anthropic公司正式宣布,日本科技巨头NEC(日本电气公司)将全面采用其Claude人工智能技术。这一合作的核心目标是什么?正是为了在NEC内部打造日本规模领先的原生人工智能工程
地铁偶遇王传福:大佬的“绿色出行”与品牌无声的广告 这两天,社交媒体上的一则偶遇帖火了。有网友在北京地铁上,碰巧遇到了比亚迪董事长王传福。更巧的是,车厢拉手上的广告,正是比亚迪自家的宣传。这画面,瞬间引发了围观。 网友们的评论也挺有意思,纷纷感慨“大佬真低调”,称赞这是“绿色出行”的身体力行。确实,
谷歌豪掷千亿加注Anthropic:AI竞赛进入“军备联盟”新阶段 AI领域的资本故事,总是一波未平,一波又起。就在上周亚马逊宣布对Anthropic进行巨额投资后,另一家科技巨头谷歌也亮出了自己的筹码。根据最新消息,谷歌的出手更为阔绰:一笔高达100亿美元的现金投资已经敲定,而这可能仅仅是个开始。
币安Binance官方APP中文用户安装注册入口链接 本篇文章旨在为您提供币安Binance官方APP中文用户安装注册入口链接。该应用程序是您便捷管理数字资产的专业平台,致力于提供安全、高效的交易体验。它支持多种数字资产操作,界面友好,功能全面。本文提供的是官方应用下载链接,您可以直接点击链接,即可





