JavaScript学习-原型和原型链

news2024/9/27 2:44:44

原型和原型链

  • 示例代码
//创建一个Person类
class Person {
  constructor(name) {
    this.name = name;
  }

  drink() {
    console.log('喝水');
  }
}
//创建一个Teacher类,继承Person
class Teacher extends Person {
  constructor(name, subject) {
    super(name);
    this.subject = subject;
  }

  teach() {
    console.log(`我是${this.name},教${this.subject}.`)
  }
}

const teacher = new Teacher(`小明`,`英语`);
console.log(`teacher`, teacher);
teacher.teach();
teacher.drink();

解释

  • 原型链有显示原型和隐式原型两个概念,如以上代码可以这么理解,
  • Person类是第一个类,因此它里面的所有方法看作显式原型,
  • 然后是Teacher类,继承了Person类,因此Person类里面的显式原型变成了Teacher类里面的隐式原型,
  • 然后嘞,teacher是被Teacher给new出来的,因此Teacher里面的teach()方法就是teacher的隐式原型,而teacher的显式原型是自己的name、subject两个参数。
  • 就比如说上述代码的最后两行的调用,teacher本身没有的就会去隐式原型里面去找,找不到又去上一层找,因此就类似于一条链条,所以叫做原型链,以下图示看起来就类似于指针。
  • 或许换通俗一点的话来说,自己有的就是自己的显示原型,自己没有的,但是可以通过渠道调用别人的就是自己的隐式原型。
  • 那还有一个方法可以验证该属性或者方法是不是自身的,例如输入teacher.hasOwnProperty(‘name’),会返回一个true,而输入teacher.hasOwnProperty(‘teach’),会返回false。
  • 关于图示中的Object,几乎所有的对象都是Object的实例,也就是说他们都继承自Object.prototype,Object.prototype是原型链的顶端,它包含一些基本的方法和属性,所有的对象都可以访问这些方法和属性。呐,因此我们也可以说Object里面的方法是Person类的隐式原型,如下图所示。
  • 图示
    原型和原型链

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

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

相关文章

详细解读vcruntime140_1.dll修复的手段,如何快速解决vcruntime140_1.dll丢失问题

当出现“无法找到vcruntime140_1.dll”或程序“未能正常启动”时,这通常指示系统中缺失了一个关键文件:vcruntime140_1.dll。作为Visual C Redistributable组件的一部分,这个小文件在很多用Visual Studio编译的C程序运行时发挥着重要作用。解…

go语言(十八)---- goroutine

一、goroutine package mainimport ("fmt""time" )func main() {//用go创建承载一个形参为空,返回值为空的一个函数go func() {defer fmt.Println("A.defer")func() {defer fmt.Println("B.defer")//退出当前goroutinefmt…

P1042 [NOIP2003 普及组] 乒乓球 Java版最简单题解!

为什么说最简单,因为本人就是一个算法小白,只学过一点数据结构,打算备战蓝桥杯的,网上说备战蓝桥杯就去刷洛谷,早有听闻洛谷很难,今天一看算是真的被打醒了,对于小白是真的太难了。(;༎ຶД༎ຶ…

在Idea中使用git查看历史版本

idea查git历史 背景查看步骤总结 背景 有好几次同事到我电脑用idea查看git管理的历史记录,每次都说我的idea看不了历史版本,叫我到他电脑上去看,很晕,为什么,原来是我自己把显示历史文件的视图覆盖了,下面我们来一起学…

Python open函数

在Python编程中,open()函数是一个重要的文件操作函数,用于打开文件并进行读取、写入、追加等操作。本文将深入探讨open()函数的用法、语法、文件模式、示例代码,并探讨其在实际编程中的应用场景。 什么是open()函数? open()函数…

【阻塞队列】阻塞队列的模拟实现及在生产者和消费者模型上的应用

文章目录 📄前言一. 阻塞队列初了解🍆1. 什么是阻塞队列?🍅2. 为什么使用阻塞队列?🥦3. Java标准库中阻塞队列的实现 二. 阻塞队列的模拟实现🍚1. 实现普通队列🍥2. 实现队列的阻塞功…

Python.五.文件

1.文件读取的操作 1.文件的打开 open(name,mode,encoding) name:是要打开目标文件名的字符串,可以包含文件所在的具体路径 mode:设置打开文件的模式:只读 r 、写入 w 、追加 a encoding:编码格式 UTF-8 fopen("C:/test.txt"…

XSS_Labs靶场通关笔记

每一关的方法不唯一;可以结合源码进行分析后构造payload; 通关技巧(四步): 1.输入内容看源码变化; 2.找到内容插入点; 3.测试是否有过滤; 4.构造payload绕过 第一关 构造paylo…

怎么获取二维码的链接?二维码转链接只需3步

怎么从二维码中提取内容呢?现在很多内容都会用二维码方式来存储,但是有些场景下二维码是无法使用的时候,想要查看二维码中的内容,就需要分解二维码成链接后使用。那么二维码分解成链接具体该怎么做呢?今天就将在线二维…

Hammer.js中文教程

一、什么是hammer.js hammerJS是一个开源的,轻量级的触屏设备javascript手势库,它可以在不需要依赖其他东西的情况下识别触摸,鼠标事件。允许同时监听多个手势、自定义识别器,也可以识别滑动方向。 优点: 为移动端网…

[已解决]504 Gateway Time-out 网关超时

文章目录 问题:504 Gateway Time-out 504 Gateway Time-out 网关超时思路解决 问题:504 Gateway Time-out 504 Gateway Time-out 网关超时 思路 网上的常规思路是修改nginx配置文件,增加请求执行时间,试过没有用 keepalive_timeout 600; fastcgi_con…

一文读懂: AIGC基本原理及应用领域

AIGC是利用人工智能技术来生成内容的一种新型技术。随着人工智能技术的不断发展,AIGC技术也得到了越来越广泛的应用。未来,AIGC技术将会对我们的生活和工作产生巨大的影响。 一、AIGC技术的基本原理 AIGC技术的基本原理是利用人工智能技术中…

JAVA学习笔记三

1.java执行流程分析 2.什么是编译 javac Hello.java 1.有了java源文件,通过编译器将其编译成JVM可以识别的字节码文件 2.在该源文件目录下,通过javac编译工具对Hello.java文件进行编译 3.如果程序没有错误,没有任何提示,但在…

[数据结构]-哈希

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 本期学习目标&…

LabVIEW准分子激光器控制系统

LabVIEW准分子激光器控制系统是为了实现准分子激光光源在工业、医疗和科研领域的应用集成及其功能的扩展。系统由PC端和激光器端两部分构成,通过光隔离的RS232通讯连接,以实现稳定可靠的控制与通信。 系统主要由微控制单元(MCU)主…

程序员的你,是不是又被催婚了

程序员作为社会中一个较为特殊的群体,由于工作特性(如长时间对着电脑、工作节奏较快、加班相对频繁等)以及职业发展需要投入大量时间和精力,有时可能会面临较晚结婚的问题。这也导致了在某些情况下,他们可能被家人或朋…

C#使用TimeSpan对象获取时间间隔

目录 一、TimeSpan基础知识 二、实例 一、TimeSpan基础知识 使用TimeSpan对象可以方便地获取两个时间段的间隔。两个时间信息相减后会得到一个TimeSpan对象,该TimeSpan对象代表时间间隔,可以通过TimeSpan对象的Days、Hours、Minutes、Seconds、Millise…

腾讯云幻兽帕鲁专有服务器配置价格表,4核16G、8核32G

幻兽帕鲁服务器配置CPU内存多大合适?如何选择?最低4核8G起步,4核16G是官方推荐配置,最好是4核32G配置。阿腾云atengyun.com分享幻兽帕鲁Palworld服务器CPU内存配置及租用费用,如下图,Palworld官方推荐服务器…

利用Django搭建python web项目(简单登录)

1.概述 目前市面上web项目大多数是由java语言开发(结合spring框架),但这并不意味着只有java语言能够开发web项目,python语言、go语言同样可以做到。本文将利用Django框架(由python语言开发的web框架)来搭建…

09. Springboot集成sse服务端推流

目录 1、前言 2、什么是SSE 2.1、技术原理 2.2、SSE和WebSocket 2.2.1、SSE (Server-Sent Events) 2.2.2、WebSocket 2.2.3、选择 SSE 还是 WebSocket? 3、Springboot快速集成 3.1、添加依赖 3.2、创建SSE控制器 3.2.1、SSEmitter创建实例 3.2.2、SSEmi…