js-7:javascript原型、原型链及其特点

1、原型
JavaScript常被描述为一种基于原型的语言-每个对象拥有一个原型对象。
当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。
准确的说,这些属性和方法定义在Object的构造器函数(constructor functions)之上的prototype属性上,而非实例对象本身。
举例:
函数可以有属性,每个函数都有一个特殊的属性叫做原型prototype。
在这里插入图片描述
控制台输出:

在这里插入图片描述
上面这个对象,就是原型对象,可以看到,原型对象有一个自有属性,这个属性指向该函数,如下图关系展示:
在这里插入图片描述
2、原型链
原型对象也可能拥有原型,并且从中继承方法和属性,一层一层,以此类推。这种关系通常被称为原型链(prototype chain),它解释了为何一个对象会拥有定义在其他对象种的属性和方法。
在对象实例和它的构造器之间建立一个链接(它是_proto_属性,是从构造函数的prototype属性派生的),之后通过上溯原型链,在构造器中找到这些属性和方法。
举例:
在这里插入图片描述
根据上述代码,可以得到下图:

在这里插入图片描述
分析:
构造函数Preson存在原型对象Preson.prototype
构造函数生成实例对象person,person的_proto_指向构造函数Person原型对象
Preson.prototype._proto_指向内置对象,因为Person.prototype是个对象,默认是由Object函数作为类创建的,而Object.prototype为内置对象
Preson._proto_指向内置匿名函数anonumous,因为Person是个函数对象,默认由Function作为类创建
Function.prototype和Function._proto_同时指向内置匿名函数anonumous,这样原型链的终点就是null

3、总结
首先看几个概念:
_proto_作为不同对象之间的桥梁,用来指向创建它的 构造函数的原型对象的。
在这里插入图片描述
每个对象的_proto_都是指向它的构造函数的原型对象prototype的
在这里插入图片描述
构造函数是一个函数对象,是通过Function构造器产生。
在这里插入图片描述
原型对象本身是一个普通对象,而普通对象的构造函数都是Object
在这里插入图片描述
上面已经说过,所有构造器都是函数对象,函数对象是Function构造产生的。
在这里插入图片描述
Object的原型对象也有_proto_属性指向null,null是原型链的顶端。
在这里插入图片描述
总结:
一切对象都继承自Object对象,Object对象直接继承根源对象null
一切函数对象(包括Object对象),都是继承自Function对象
Object对象直接继承自Function对象
Function对象的_proto_会指向自己的原型对象,最终还是会继承自Object对象

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

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

相关文章

Oracle 开发篇+Java通过HiKariCP访问Oracle数据库

标签:HikariCP、数据库连接池、JDBC连接池、释义:HikariCP 是一个高性能的 JDBC 连接池组件,号称性能最好的后起之秀,是一个基于BoneCP做了不少的改进和优化的高性能JDBC连接池。 ★ Java代码 import java.sql.Connection; impor…

品牌渠道控价常见问题有哪些

不管是哪个品牌在做控价时,会遇到的问题都是相通的,如果筛选低价、窜货链接,如何去治理这些链接,使其下架,或者是改价。也会有品牌需要针对渠道中的乱价问题进行提前预警或者规避,这些可以通过分析电商数据…

Chatgpt API调用报错:openai.error.RateLimitError

Chatgpt API 调用报错: openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details. 调用OpenAI API接口 import openai import osopenai.api_key os.getenv("OPENAI_API_KEY")result openai.Chat…

linux onlyOffice docker 离线部署

文章目录 前言1. 安装Docker容器2. 拉取镜像3. 验证 前言 docker 离线安装onlyoffice,如在线安装可直接跳过导出导入镜像步骤,拉取后直接运行。 1. 安装Docker容器 下载文件 wget https://download.docker.com/linux/static/stable/x86_64/docker-19…

竞赛项目 深度学习验证码识别 - 机器视觉 python opencv

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &#x…

Redis_概述

1.redis概述 1.1 简介 截止到2021年12月 数据库排名https://db-engines.com/en/ranking redis(Remote Dictionary Server) 一个开源的key-value存储系统它支持存储的Value类型:包括String(字符串),list(链表),set(集合),zset(sorted set 有序集合),hash(哈希类型…

ad+硬件每日学习十个知识点(27)23.8.7 (DCDC的datasheet)

文章目录 1.DCDC拿到手册需要关注的参数2.MOS选型3.TPS54331的ECO模式(跳跃模式,损耗小、纹波大)4.TPS54331的引脚功能(BOOT这里没太看懂,之后回来再看看)5.TPS54331的额定值6.TPS54331在test条件下的电气特…

【Linux】【预】配置网络IP,挂载网络目录

【Linux】【预】配置网络IP,挂载网络目录 1. 配置查看IP2.配置Linux中的IP3. 串口连接开发板,配置 1. 配置查看IP a . 查看ipifconfig如下操作,其中的:192.168.252.140就是它的IP b . 使用xmodem 连接到虚拟机,最后点…

对于企业:数字化的趋势不可阻挡.以无代码开发实现敏捷交付

在科技日新月异的今天,我们正处在一个由数据驱动的时代。为了在这个时代中占据一席之地,我们需要不断探索新的开发模式,以适应不断变化的市场需求。其中,无代码开发模式正逐渐成为引领未来科技的关键。 一、什么是无代码开发 无代…

判断时间段是否重叠

1、逻辑公式 时间段1&#xff1a;start1&#xff08;开始时间&#xff09;&#xff0c;end1&#xff08;结束时间&#xff09; 时间段2&#xff1a;start2&#xff08;开始时间&#xff09;&#xff0c;end2&#xff08;结束时间&#xff09; 重叠条件为&#xff1a;start1 <…

unity修改单个3D物体的重力的大小该怎么处理呢?

在Unity中修改单个3D物体的重力大小可以通过以下步骤实现&#xff1a; 创建一个新的C#脚本来控制重力&#xff1a; 首先&#xff0c;创建一个新的C#脚本&#xff08;例如&#xff1a;GravityModifier.cs&#xff09;并将其附加到需要修改重力的3D物体上。在脚本中&#xff0c…

7个顶级开源数据集来训练自然语言处理(NLP)和文本模型

推荐&#xff1a;使用 NSDT场景编辑器快速助你搭建可二次编辑的3D应用场景 NLP现在是一个令人兴奋的领域&#xff0c;特别是在像AutoNLP这样的用例中&#xff0c;但很难掌握。开始使用NLP的主要问题是缺乏适当的指导和该领域的过度广度。很容易迷失在各种论文和代码中&#xff…

电脑蓝屏显示恢复怎么办,电脑蓝屏后出现恢复界面怎么回事

电脑蓝屏显示恢复怎么办,电脑蓝屏后出现恢复界面怎么回事 目录 下面是问题描述&#xff08;看看和你遇到的问题一不一样&#xff09; 图片一 图片二 图片三 开始解决问题 步骤 1&#xff1a;耐心等待 步骤 2&#xff1a;重启计算机 步骤 3&#xff1a;进入安全模式 步骤…

【插入排序】直接插入排序 与 希尔排序

目录 1. 排序的概念&#xff1a; 2.插入排序基本思想 3.直接插入排序 4.希尔排序 1. 排序的概念&#xff1a; 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xf…

FlexRay汽车总线静电防护,如何设计保护方案图?

FlexRay是一种高速、实时、可靠、具备故障容错能力的总线技术&#xff0c;是继CAN和LIN总线之后的最新研发成果。FlexRay为线控应用&#xff08;即线控驱动、线控转向、线控制动等&#xff09;提供了容错和时间确定性性能要求。虽然FlexRay将解决当前高端和未来主流车载网络的挑…

vite+vue3项目环境搭建

1.安装 npm init vite 2.输入项目名称 vue3-project 3.选择框架 说明&#xff1a;vue 4.选择类别 说明&#xff1a;JavaScript 5.进入文件夹 cd vue3-project yarn npm run dev 6.打开local

W5500-EVB-PICO 做TCP Server进行回环测试(六)

前言 上一章我们用W5500-EVB-PICO开发板做TCP 客户端连接服务器进行数据回环测试&#xff0c;那么本章将用开发板做TCP服务器来进行数据回环测试。 TCP是什么&#xff1f;什么是TCP Server&#xff1f;能干什么&#xff1f; TCP (Transmission Control Protocol) 是一种面向连…

Untiy Json和Xml的序列化和反序列化

Json的序列化和反序列化 1.定义数据类 [Serializable] public class ZoomPoint {// 点名称, 将作为Key被字典存储public string name;// 轴心X坐标public Vector2 pivot Vector2.one / 2;// 放大倍率&#xff0c;小于1是为缩小倍率&#xff0c;小于0是取绝对值&#xff0c;不…

空降流量危机?QQ音乐升级架构应对高并发

# 关注并星标腾讯云开发者 # 每周3 | 谈谈我在腾讯的架构设计经验 # 第2期 | 赵威&#xff1a;QQ音乐评论系统如何实现高可用&#xff1f; QQ 音乐自诞生以来&#xff0c;已有多个版本的评论业务系统。最新版本是19年再次全新迭代&#xff0c;基于 tlist 存储&#xff0c;按照发…

外贸路上那些哭笑不得的事情

前几天一个老顾客在软件上联系&#xff0c;说自己上次的订货体验很满意&#xff0c;货物的质量很好&#xff0c;而且服务和回复也很及时&#xff0c; 比起他之前的供货商要好很多&#xff0c;他之前的供货商虽然货物的质量也很好&#xff0c;但是每次询问问题都是要等好久才给…