当前位置: 首页
前端开发
如何用原型链与 Object.getPrototypeOf 获取对象原型

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

热心网友 时间:2026-04-23
转载

如何用原型链与 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() 显然更简洁,也更符合语义。这算是原型操作中一个非常实用的小技巧了。

来源:https://www.php.cn/faq/2330976.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Less如何提升CSS维护性_使用参数化Mixin实现灵活组件

Less如何提升CSS维护性_使用参数化Mixin实现灵活组件

Less参数化Mixin:如何写出既灵活又可控的样式代码? Less参数化Mixin怎么写才不重复造轮子 开门见山,参数化Mixin的核心目标不是炫技,而是解决一个实际问题:把那些“可能会变”的样式值抽离出来。这样一来,样式规则只需定义一次,修改时就能全局生效,维护效率自然就上去了。关键在于,你得准

时间:2026-04-24 21:53
Vue 中的 Patch 过程是怎么工作的?从 VNode 到真实 DOM 的转化全指南

Vue 中的 Patch 过程是怎么工作的?从 VNode 到真实 DOM 的转化全指南

Vue 中的 Patch 过程是怎么工作的?从 VNode 到真实 DOM 的转化全指南 Patch 的核心目标:高效更新 DOM 简单来说,Vue 的 Patch 过程干的就是一件“聪明事”:它拿着新旧两份虚拟节点(VNode)清单,只去更新真实 DOM 里真正变了的那部分,而不是不管三七二十一,

时间:2026-04-24 21:52
CSS如何实现移动端加载占位骨架屏_利用CSS渐变色与动画效果

CSS如何实现移动端加载占位骨架屏_利用CSS渐变色与动画效果

CSS如何实现移动端加载占位骨架屏:利用渐变色与动画效果 先明确一个核心概念:一个真正好用的骨架屏,本质上不是图片,而是用CSS背景渐变“画”出来的容器轮廓。关键在于,如何让background-image精准覆盖真实内容区域,同时巧妙地利用透明间隙来模拟文字或头像的留白。这听起来简单,但实际操作时

时间:2026-04-24 21:52
CSS如何实现侧边栏推拽切换_利用CSS动画平滑过渡布局

CSS如何实现侧边栏推拽切换_利用CSS动画平滑过渡布局

侧边栏推拽用 transform: translateX() 更流畅,避免 left margin-left 触发重排;初始隐藏用 translateX(-100%),配合 ease-out 或自定义 cubic-bezier 过渡更自然;移动端需谨慎 preventDefault() 并启用 -w

时间:2026-04-24 21:51
Ionic 7 中在 Tab 内实现页面内导航的完整教程

Ionic 7 中在 Tab 内实现页面内导航的完整教程

Ionic 7 中在 Tab 内实现页面内导航的完整教程 本文详解如何在 Ionic 7(Vanilla JS)中为单个 Tab 配置独立的嵌套路由系统,解决 ion-router 在 ion-tab 内无法正常跳转的问题,并提供可运行的结构化实现方案。 如果你正在用 Ionic 7 的纯 Ja v

时间:2026-04-24 21:51
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜
热门教程
更多
  • 游戏攻略
  • 安卓教程
  • 苹果教程
  • 电脑教程