当前位置: 首页 > news >正文

【JS知识点】——原型和原型链

文章目录

  • 原型和原型链
    • 构造函数
    • 原型
      • 显式原型(prototype)
    • 隐式原型(\_\_proto\_\_)
    • 原型链
    • 总结

原型和原型链

在js中,原型和原型链是一个非常重要的知识点,只有理解原型和原型链,才能深刻理解JS。在这一个月的面试中,原型和原型链也是一个高频知识点,现做出如下总结。

构造函数

构造函数本身就是一个函数,只是为了与普通函数区别,其首字母一般大写,构造函数与普通函数的区别在于,使用new创建实例的函数就是构造函数,直接调用则是普通函数。

function Student(){this.name="构造函数"
}var stu=new Student()console.log(stu.name);//构造函数

原型

显式原型(prototype)

JS是一门基于原型的语言。而JS中的原型是其中十分重要的一个概念。原型本质上就是一个对象,它的存在是为了JS中的实例对象可以获取到原型中的公共属性和公共方法
每个对象都有一个显式原型对象,当我创建一个名为Student的类时,其显式原型原型如下:

  • constructor:显式原型中包含的构造函数属性,指向该显式原型的构造函数
console.log(Student,Student.prototype);//输出展示如下图

Student的原型
于是,构造函数和原型之间存在以下关系,原型相当于每一个对象实例的私有属性,即每当创建一个对象,该对象就会有一个为空的显式原型属性。
构造函数和原型之间的关系

隐式原型(__proto__)

每一个对象(除了null)都有一个属性叫做__proto__(隐式原型),通过它可以访问到该对象的构造函数的原型对象,关系如下:
加入隐式原型的关系图
从JS的数据类型可以知道,函数类型本质是也是对象,而对象的原型又是指向其构造函数的原型对象,得出如下关系:
加入Object之后

下面是一段关于原型的代码,方便大家理解:

function Person() {this.name = "构造函数";function col() {console.log('我是构造函数中的方法');};
}
Person.prototype = {name: "原型",age: "18",getNum: function () {console.log('我是构造函数中的原型', 1);}
}
var per = new Person()
console.log(per.__proto__.__proto__ == Object.prototype);// true 对象实例的隐式原型(本质就是通过Object()构造出来的实例对象)的隐式原型指向Object.prototype;
console.log(per.__proto__ == Person.prototype);// true 没有给隐式原型添加数据时,其默认指向其构造函数的显式原型
console.log(per.name, per.age,per.getNum);// 原型,18 ,getNum  可以从构造函数中获取到age和name以及getNum,这里不能直接调用,但在外可以(原因不知)// 当为实例对象per的隐式原型中添加了数据时
per.__proto__={name:"隐式原型",age:"22"
}
console.log(per.name, per.age,per.getNum); // 隐式原型,22,报错,getNum不存在
//原因,此时实例对象的__proto__指定了特定的值,不会再去其构造函数的显示原型中查找,所以找不到getNum,报错

原型链

每个对象拥有一个原型对象,通过 __proto__ 指针指向上一个原型 ,并从中继承方法和属性,同时原型对象也可能拥有原型,这样一层一层,最终指向 null。这种关系被称为原型链 (prototype chain),通过原型链一个对象会拥有定义在其他对象中的属性和方法。
最后的关系图如下:
原型链最后的关系图

总结

  • 使用new生成实例的函数就是构造函数,直接调用的就是普通函数。
  • 原型的主要作用是用来存储对象实例的公共属性和公共方法
  • 每个对象都拥有一个原型对象;每个引用类型的隐式原型都指向它的构造函数的显式原型;
  • 一个对象可以通过原型链获取其他对象的属性和方法
  • Object.prototype是所有对象的根对象,即原型链终点,其隐式原型指向Null;

相关文章:

【JS知识点】——原型和原型链

文章目录原型和原型链构造函数原型显式原型(prototype)隐式原型(\_\_proto\_\_)原型链总结原型和原型链 在js中,原型和原型链是一个非常重要的知识点,只有理解原型和原型链,才能深刻理解JS。在…...

c盘怎么清理到最干净?有什么好的清理方法

c盘怎么清理到最干净?有什么好的清理方法?清理C盘空间是电脑维护的重要步骤之一。C盘是Windows操作系统的核心部分,保存了许多重要的系统文件,因此空间不足会影响计算机的性能和稳定性。下面是一些清理C盘空间的方法 一.清理临时文件 在使用…...

day26_HTML

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、二阶段介绍 二、HTML 零、 复习昨日 见代码 一、二阶段介绍 第一阶段: 基础入门 java基本语法编程基础(方法,数组)面向对象编程常用类高级(IO,线程,新…...

深度剖析C语言预处理

致前行的人: 人生像攀登一座山,而找寻出路,却是一种学习的过程,我们应当在这过程中,学习稳定冷静,学习如何从慌乱中找到生机。 目录 1.程序翻译过程: 2.字符串宏常量 3.用宏定义充当注释符号 4…...

【WPF 值转换器】ValueConverter 进阶用法

【WPF 值转换器】ValueConverter 进阶用法介绍基类实现子类实现效果介绍 值转换器在WPF开发中是非常常见的,当然不仅仅是在WPF开发中。值转换器可以帮助我们很轻松地实现,界面数据展示的问题,如:模块隐藏显示、编码数据展示为可读…...

Vue2的基本使用

一、vue的基本使用 第一步 引入vue.js文件 <script src"https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script> 或者<script src"./js/vue.js"></script> 第二步 在body中设置一个挂载点 {{msg}} <div id"app…...

【云原生kubernetes】k8s数据存储之Volume使用详解

目录 一、什么是Volume 二、k8s中的Volume 三、k8s中常见的Volume类型 四、Volume 之 EmptyDir 4.1 EmptyDir 特点 4.2 EmptyDir 实现文件共享 4.2.1 关于busybox 4.3 操作步骤 4.3.1 创建配置模板文件yaml 4.3.2 创建Pod 4.3.3 访问nginx使其产生访问日志 4.3.4 …...

SerDes---CDR技术

1、为什么需要CDR 时钟数据恢复主要完成两个工作&#xff0c;一个是时钟恢复&#xff0c;一个是数据重定时&#xff0c;也就是数据的恢复。时钟恢复主要是从接收到的 NRZ&#xff08;非归零码&#xff09;码中将嵌入在数据中的时钟信息提取出来。 2、CDR种类 PLL-Based CDROve…...

如何实现在on ethernetPacket中自动回复NDP response消息

对于IPv4协议来说,如果主机想通过目标ipv4地址发送以太网数据帧给目的主机,需要在数据链路层填充目的mac地址。根据目标ipv4地址查找目标mac地址,这是ARP协议的工作原理 对于IPv6协议来说,根据目标ipv6地址查找目标mac地址,它使用的不是ARP协议,而是邻居发现NDP(Neighb…...

CSS清楚浮动

先看看关于浮动的一些性质 浮动使元素脱离文档流 浮动元素可以设置宽高&#xff0c;在CSS中&#xff0c;任何元素都可以浮动&#xff0c;浮动元素会生成一个块级框&#xff0c;而不论其本身是何种元素。 如果没有给浮动元素指定高度&#xff0c;&#xff0c;那么它会以内容的…...

HTTPS详解(原理、中间人攻击、CA流程)

摘要我们访问浏览器也经常可以看到https开头的网址&#xff0c;那么什么是https&#xff0c;什么是ca证书&#xff0c;认证流程怎样&#xff1f;这里一一介绍。原理https就是httpssl&#xff0c;即用http协议传输数据&#xff0c;数据用ssl/tls协议加密解密。具体流程如下图&am…...

EventLoop机制

JavaScript 是单线程的语言 JavaScript 是一门单线程执行的编程语言。也就是说&#xff0c;同一时间只能做一件事情。 单线程执行任务队列的问题&#xff1a; 如果前一个任务非常耗时&#xff0c;则后续的任务就不得不一直等待&#xff0c;从而导致程序假死的问题。 同步任…...

倒立摆建模

前言 系统由一辆具有动力的小车和安装在小车上的倒立摆组成&#xff0c;系统是不稳定&#xff0c;我们需要通过控制移动小车使得倒立摆保持平衡。 具体地&#xff0c;考虑二维情形如下图&#xff0c;控制力为水平力FFF&#xff0c;输出为角度θ\thetaθ以及小车的位置xxx。 力…...

SpringSecurity支持WebAuthn认证

WebAuthn是无密码身份验证技术&#xff0c;解决了密码泄露的风险&#xff0c;主流的浏览器都支持。有很多开源的类库实现了WebAuthn规范&#xff0c;Java下流行的类库有&#xff1a;webauthn4jjava-webauthn-serververtx-authSpring Security官方暂时未支持WebAuthn&#xff0c…...

深度学习技巧应用3-神经网络中的超参数搜索

大家好&#xff0c;我是微学AI&#xff0c;今天给大家带来深度学习技巧应用3-神经网络中的超参数搜索。 在深度学习任务中&#xff0c;一个算法模型的性能往往受到很多超参数的影响。超参数是指在模型训练之前需要我们手动设定的参数&#xff0c;例如&#xff1a;学习率、正则…...

【信号量机制及应用】

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 目录 一、信号量机制 二、信号量的应用 >利用信号量实现进程互斥   >利用信号量实现前驱关系   >利用记录型信号量实现同步 三、例题 四、参考 一、信号量机制 信号量是操作系统提…...

围棋高手郭广昌的“假眼”棋局

&#xff08;图片来源于网络&#xff0c;侵删&#xff09;文丨熔财经作者|易不二2022年&#xff0c;在复星深陷债务压顶和变卖资产漩涡的而立之年&#xff0c;“消失”已久的郭广昌&#xff0c;在质疑与非议声中回国稳定军心&#xff0c;强调复星将在未来的五到十年迎来一个全新…...

学成教育-统一异常处理实现

一、统一异常处理实现 统一在base基础工程实现统一异常处理&#xff0c;各模块依赖了base基础工程都 可以使用。 首先在base基础工程添加需要依赖的包&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-web</…...

JNI内通过参数形式从C/C++中传递string类型数据至Java层

目录 0 前言 1 string类型参数形式传值 2 测试和结果 0 前言 类似之前我写过的两篇文章&#xff1a;一篇介绍了在JNI中基础类型int的传值方式&#xff1b;一篇详细梳理了在JNI层中多维数组的多种传值方式。 JNI内两种方式从C/C中传递一维、二维、三维数组数据至Java层详细…...

自动化测试——执行javaScript脚本

文章目录一、点击元素(对应的click())二、input标签对应的值&#xff08;对应的send_keys()&#xff09;修改时间控件的属性值&#xff1a;三、元素的文本属性四、js脚本滚动操作一、点击元素(对应的click()) 使用场景&#xff1a;当使用显性等待不能解决问题时 代码中实现点击…...

常用十种算法滤波

十种算法滤波1. 限幅滤波法&#xff08;又称程序判断滤波法&#xff09;2. 中位值滤波法3. 算术平均滤波法4. 递推平均滤波法&#xff08;又称滑动平均滤波法&#xff09;5. 中位值平均滤波法&#xff08;又称防脉冲干扰平均滤波法&#xff09;6. 限幅平均滤波法7. 一阶滞后滤波…...

IO多路复用

一、概述 IO多路复用&#xff1a;进程同时检查多个文件描述符&#xff0c;以找出他们中的任何一个是否可执行IO操作。 核心&#xff1a;同时检查多个文件描述符&#xff0c;看他们是否准备好了执行IO操作。文件描述符就绪状态的转化是通过一些IO事件来触发。 二、水平触发和…...

Python中的错误是什么,Python中有哪些错误

7.1 错误(errors) 由于Python代码通常是人类编写的&#xff0c;那么无论代码是在解释之前还是运行之后&#xff0c;或多或少总会出现一些问题。 在Python代码解释时遇到的问题称为错误&#xff0c;通常是语法和缩进问题导致的&#xff0c;这些错误会导致代码无法通过解释器的解…...

记录自己开发一款小程序中所遇到的问题(uniapp+uview)(持续更新)

每次开发小程序中&#xff0c;都会遇到各种各样的问题。但是有的问题已经遇到过了&#xff0c;但是遇到的时候还是要各种的问度娘。 特此出这篇文章&#xff0c;方便自己也是方便大家。 仅供参考 1. u-collapse的样式在h5中正常&#xff0c;但是运行到微信小程序中样式就乱了…...

华为机试 HJ43 迷宫问题

经典迷宫问题dfs 题目链接 描述 定义一个二维数组 N*M &#xff0c;如 5 5 数组下所示&#xff1a; int maze[5][5] { 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫&#xff0c;其中的1表示墙壁&#xff0c;0表示可以走…...

数据结构|链表

概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。单链表的形式就像一条铁链环环相扣它与顺序表最大的不同是&#xff0c;单链表的数据存储是在不连续的空间&#xff0c;存储的数据里面含有…...

计算机写论文时,怎么引用文献? - 易智编译EaseEditing

首先需要清楚哪些引用必须注明[1]&#xff1a; 任何直接引用都要用引号并注明来源&#xff1b; 任何不是自己的口头或书面的观点、解释和结论都应注明来源&#xff1b; 即使不用原话&#xff0c;但是他人的思路、概念或观点也应注明&#xff1b; 不要为了适合你的观点修改原…...

实验三:贪心

1.减肥的小k1 题目描述 小K没事干&#xff0c;他要搬砖头&#xff0c;为了达到较好的减肥效果&#xff0c;教练规定的方式很特别&#xff1a; 每一次&#xff0c;小K可以把两堆砖头合并到一起&#xff0c;消耗的体力等于两堆砖头的重量之和。 经过 n-1次合并后&#xff0c; …...

MySQL日志文件

文章目录1.MySQL中的日志文件2.bin log的作用3.redo log的作用4.bin log和redo log的区别&#xff08;1&#xff09;存储的内容&#xff08;2&#xff09;功能&#xff08;3&#xff09;写入时间&#xff08;4&#xff09;写入方式5.两阶段提交6.undo log的作用1.MySQL中的日志…...

Intel8086处理器使用NASM汇编语言实现操作系统08-关于负数的相关处理idiv/cbw/cwde/cdqu/cwd/cdq/cdo/

很多人都知道一个有符号的数&#xff0c;最高位是1&#xff0c;则表示负数&#xff0c;最高位是0&#xff0c;则表示正数&#xff0c;如果假设我的CPU是4位CPU&#xff0c;那么对于1001这个数&#xff0c;是表示9&#xff0c;还是表示-7呢&#xff1f;&#xff1f;&#xff1f;…...

有没有接活做的网站/google chrome官网入口

初学者在学习向上转型可能会很难理解&#xff0c;向上转型并不能调用子类特有属性和方法&#xff0c;我们必须先生成子类实例再赋值给父类引用(向上转型)&#xff0c;然后将父类引用向下强制转换给子类引用(向下转型)&#xff0c;这样才能调用子类中的所有成员。这看起来像是多…...

wordpress做ip统计/swot分析

大家好我是雨果&#xff0c;今天我们来继续学习函数&#xff0c;之前由于工作的原因断更了几天&#xff0c;今天我们继续&#xff0c;今天要跟大家分享的是大名鼎鼎的IF函数&#xff0c;这个函数非常重要&#xff0c;使用频率非常高&#xff0c;我会尽量讲的详细一点&#xff0…...

做北京会所网站哪个好/seo咨询推广

Spring Bean 的生命周期和作用域&#xff1f; Spring Bean 的生命周期 Spring Bean 的生命周期可以分成&#xff0c;创建&#xff0c;使用&#xff0c;销毁几个过程。 Spring Bean 创建过程如下&#xff1a; 实例化 Bean 对象设置 Bean 属性通过各种 Aware 接口声明了依赖关…...

政府部门网站建设内容/yandex搜索引擎入口

在Linux命令行下面下载文件&#xff0c;通过wget是比较普遍简单的&#xff0c;比如在CentOS8 里面也一样。我们先来看下自己的CentOS8系统有没有安装wget&#xff1a; [roottest redis]# rpm -qa|grep wget 如果安装了会提示当前安装的版本&#xff1a; wget-1.14-15.el7_4.1.x…...

怎么做网站二维码/苏州百度推广公司

https://www.cnblogs.com/mafly/p/SpringAOP.html转载于:https://www.cnblogs.com/lgjc/p/9078984.html...

淄博网站建设电话/找客户资源的网站

准备材料&#xff1a;一台装有Ubuntu系统的电脑&#xff0c;联网的路由器&#xff0c;网线&#xff08;这里用了两根&#xff09;&#xff0c;一根普通安卓手机充电线 我的电脑系统是Ubuntu16.04&#xff0c;尝试了在Ubuntu18.01上面运行下面的命令&#xff0c;不能运行&#x…...