前端JavaScript篇之原型链的终点是什么?如何打印出原型链的终点?

目录

  • 原型链的终点是什么?如何打印出原型链的终点?


原型链的终点是什么?如何打印出原型链的终点?

在 JavaScript 中,原型链是由对象和原型对象组成的链式结构。每个对象都有一个原型对象,并通过 __proto__ 属性指向它的原型对象。原型对象本身也是一个对象,并且拥有自己的原型对象,一直追溯到最顶层的原型对象是 Object.prototype,而 Object.prototype 的原型对象为 null

请添加图片描述

因此,原型链的终点是 null,表示没有更上一级的原型对象了。在原型链上,每个对象的 __proto__ 属性最终会指向 null

如何打印原型链和验证原型链的终点:

function Person(name) {this.name = name
}var p = new Person('John')function printPrototypeChain(obj) {console.log(obj)var proto = Object.getPrototypeOf(obj)if (proto !== null) {printPrototypeChain(proto)} else {console.log('End of prototype chain')}
}printPrototypeChain(p)

请添加图片描述
这段代码与之前的示例代码相同。通过调用 printPrototypeChain(p) 打印 p 对象的原型链。最后会输出 ‘End of prototype chain’,表示原型链的终点是 null

注意事项:

在使用 Object.getPrototypeOf() 方法时,要确保传入的参数是一个对象。如果传入的参数不是一个对象,而是一个原始值(如字符串、数字等),或者是 nullundefined,则会抛出 TypeError 异常。因此,在使用 Object.getPrototypeOf() 方法之前,需要进行类型检查或安全校验。

另外,在打印原型链时,要注意避免出现原型链中的循环引用。例如,如果对象 A 的原型是对象 B,而对象 B 的原型又是对象 A,就会导致循环引用,从而在打印原型链时陷入死循环。为了避免这种情况,可以使用一个集合(如 Set)来记录已访问过的对象,如果某个对象已经在集合中存在,则代表出现了循环引用,可以退出打印过程。

持续学习总结记录中,回顾一下上面的内容:
在使用 Object.getPrototypeOf() 方法时,需要确保传入的参数是一个对象,否则会抛出 TypeError 异常。
在打印原型链时,要注意避免出现原型链中的循环引用,可以使用集合来记录已访问过的对象,避免陷入死循环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/461824.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化测试po模式是什么

一、什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! 主要分三层: 1.基础层BasePage:封装一些最基…

职业性格测试在求职应聘跳槽中的应用

人的性格总是千奇百怪,有的人总是想迎接挑战,超越自己,不停的奔着高处走,然而有的人总是喜欢随遇而安,踏踏实实一辈子,有份安稳的工作,有吃有喝就好。那么对于哪些喜欢迎接挑战,但又…

猫头虎分享:ECMAScript Modules规范示例详解

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Slider组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Slider组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Slider组件 滑动条组件,通常用于快速调节设置值,如音量调…

备战蓝桥杯---动态规划(基础2)

本专题主要是介绍几个比较经典的题目: 假设我们令f[i]为前i个的最长不下降子序列,我们会发现难以转移方程很难写(因为我们不知道最后一个数)。 于是,我们令f[i]为以i结尾的最长不下降子序列,这样子我们就可…

企业内部知识库管理软件的终极指南:如何选择最适合你的工具?

知识库管理软件对于希望提高客户支持和组织效率的公司来说是一个强大的工具。在数字时代,拥有一个可靠的知识库系统对于快速准确地满足客户需求至关重要。在当今的技术条件下,知识库管理软件有很多选择,每个企业都应该仔细评估并选择最适合自…

秋招上岸大厂,分享一下经验

文章目录 秋招过程学习过程项目经验简历经验面试经验offer选择总结 秋招过程 今天是除夕,秋招已经正式结束了,等春节过完就到了春招的时间点了。 运气比较好,能在秋招的末尾进入一家大厂,拿到20k的sp offer。 从九月份十月份就开…

C#上位机与三菱PLC的通信05--MC协议之QnA-3E报文解析

1、MC协议回顾 MC是公开协议 ,所有报文格式都是有标准 ,MC协议可以在串口通信,也可以在以太网通信 串口:1C、2C、3C、4C 网口:4E、3E、1E A-1E是三菱PLC通信协议中最早的一种,它是一种基于二进制通信协…

CSS之盒子模型

盒子模型 01-选择器 结构伪类选择器 基本使用 作用&#xff1a;根据元素的结构关系查找元素。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IE…

数字孪生与智慧园区的融合:打造未来产业生态的新篇章

随着科技的飞速发展&#xff0c;数字孪生和智慧园区已经成为当今社会发展的重要趋势。数字孪生技术为物理世界的对象提供了数字化的复制体&#xff0c;而智慧园区则通过各种信息技术手段实现园区的智能化管理。二者的融合&#xff0c;将为未来产业生态的发展开辟新的篇章。 一…

【SpringBootStarter】自定义全局加解密组件

【SpringBootStarter】 目的 了解SpringBoot Starter相关概念以及开发流程实现自定义SpringBoot Starter(全局加解密)了解测试流程优化 最终引用的效果&#xff1a; <dependency><groupId>com.xbhog</groupId><artifactId>globalValidation-spring…

Python 数据分析库之polars使用详解

概要 数据分析是现代应用程序和业务决策的关键组成部分。Python 作为一门强大的编程语言,拥有丰富的数据处理库和工具,其中之一就是 Polars。Polars 是一个现代化的数据操作和分析库,它提供了高性能的数据操作功能,支持链式方法调用,并且兼容 Pandas 和 Arrow 格式。本文…