【笔记】原型和原型链(持续完善)

概念

  1. 原型:函数都具有 prototype 属性,称之为原型,也称之为原型对象
    1.1 原型可以放一些属性和方法,共享给实例对象使用(也就是原生方法)。
    1.2 原型可以做继承
  2. 原型链:对象都有 __proto__ 属性,这个属性指向它的原型对象,原型对象也是对象,也有 __proto__ 属性,指向原型对象的原型对象,这样的链式结构称为原型链,最顶层找不到则返回 null.
  • 显式原型(prototype)是每个函数都有的一个属性,它指向一个对象,该对象包含可以由该函数的实例共享的属性和方法。当我们创建一个函数时,JavaScript 会自动为该函数创建一个 prototype 对象,并将其赋值给函数的 prototype 属性。
  • 隐式原型(__proto__)是每个对象都有的一个属性,它指向该对象的构造函数的原型对象。当我们创建一个对象时,JavaScript 会自动为该对象创建一个 __proto__ 属性,并将其指向创建该对象的构造函数的 prototype 属性。

区别

  1. prototype 是函数对象特有的属性,而 __proto__ 是对象特有的属性;
  2. prototype 用于实现继承,它包含了可以由该函数的实例共享的属性和方法。而 __proto__ 用于查找原型链,它指向该对象的构造函数的原型对象;
  3. prototype 可以通过函数名访问到它(显式原型),而 __proto__ 是隐式原型,可以通过对象的实例来访问它。
// 1. 声明一个构造函数 Person
function Person(name) {this.name = name;
}// 2. 为构造函数的原型增加 sayHello 方法
Person.prototype.sayHello = function() {console.log('Hello, ' + this.name);
};// 3. person1 为构造函数 Person 的实例对象
const person1 = new Person('Alice');// 4. 实例对象的隐式原型指向构造函数的原型
console.log(person1.__proto__ === Person.prototype); // true// 5. 构造函数的原型上的构造函数指向构造函数本身
console.log(Person.prototype.constructor === Person); // trueperson1.sayHello(); // 输出:Hello, Alice
  • 由 5 可得:在这里插入图片描述

  • 原型链:
    在这里插入图片描述

第一个是 fun 是实例对象 proto 等价于 [[prototype]],
第二个是 [[prototype]] 的 proto 是 Person 这个对象(注意不是函数/类)他的另一个身份是函数)
第三个是 Person 的 proto 是 Object,是由 Object.create 或 {} 或 new Object() 产生的

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

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

相关文章

Qt 4.8.6 的下载与安装

Qt 4.8.6 的下载与安装 Qt 4.8.6 的下载与安装下载并解压 MinGW 4.8.2Qt4.8.6 库的安装Qt Creator 3.3.0 的安装配置 Qt Creator测试 Qt 4.8.6 的下载与安装 学习《Qt Creator快速入门》(第3版),书里面要用 Qt:phonon,这个组件要…

CentOS7 安装Jenkins 2.414.3 详细教程

目录 1、前提条件硬件软件-java11安装 2、安装jenkins3、启动jenkins配置用户和用户组配置JAVA_HOME 4、配置Jenkins一直处于启动状态5、测试Jenkins是否可以访问以及配置6、访问Jenkins系统 1、前提条件 硬件 内存 4G ; 硬盘 20G 软件-java11安装 上传文件jdk-11.0.21_lin…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析》(2)

《Linux操作系统原理分析》(2) 2 Linux概述2.1 Linux发展史2.2 Linux与GNC 2.3 Linux性能2.4 Linux 技术特点 2 Linux概述 2.1 Linux发展史 年份事件1991年22岁的荷兰大学生 Linus B.Torvalds 在 PC 机上开发出简单的操作系统内核程序。1994 年 3 月Li…

Excel表格密码保护,避免他人编辑

最简单的办法解密和去除Excel表格密码是通过密码帝官网完成。具体步骤如下:第一步,在百度搜索【密码帝官网】,找到官网后第二步,点击“立即开始”进入用户中心,然后上传需要解密的Excel文件。无论是在手机还是电脑上都…

JavaScript中普通函数箭头函数容易混淆的this指向

[[toc]] 普通函数this指向什么? 普通函数的this指向哪里? this指向调用它的对象函数定义无法确定,只有函数执行时才能确定普通函数有哪些? 没有调用者的函数对象内函数使用apply// 没有调用者的函数: this(非严格)指向全局window function test(){console.log(this=,this…

常见的深度相机厂商

文章目录 OAK奥比中光图漾科技 OAK 官网地址:https://www.oakchina.cn/ OAK相机是3D视觉人工智能开发套件,它内置了深度相机(双目/结构光/ TOF)、4T算力2.5W功耗的AI处理芯片、IMU惯性导航芯片于一体。支持实时120FPS深度图像输…

【面经】讲一下spring aop

Spring AOP(面向切面编程)是一种编程思想,允许开发者在程序运行期间动态地切入代码,实现功能增强、日志记录、事务处理等功能。 在Spring AOP中,切面(Aspect)是指切入代码的通用逻辑&#xff0…

Vue+OpenLayers 创建地图并显示鼠标所在经纬度

1、效果 2、创建地图 本文用的是高德地图 页面 <div class"map" id"map"></div><div id"mouse-position" class"position_coordinate"></div>初始化地图 var gaodeLayer new TileLayer({title: "高德地…

Perl语言用多线程爬取商品信息并做可视化处理

首先&#xff0c;我们需要使用Perl的LWP::UserAgent模块来发送HTTP请求。然后&#xff0c;我们可以使用HTML::TreeBuilder模块来解析HTML文档。在这个例子中&#xff0c;我们将使用BeautifulSoup模块来解析HTML文档。 #!/usr/bin/perl use strict; use warnings; use LWP::User…

【database】审计/记录mysql、postgres、sqlserver、oracle数据库的ddl事件和语句

一、mysql 很遗憾&#xff0c;mysql不支持database级别的trigger。无法使用触发器记录ddl。 如果需要获取dll记录可以使用debezium/cdc在mysql的binlog中解析。 二、postgres 创建trigger 能记录&#xff1a; create tabledrop tablealter table add/drop/rename/修改类型…

C# PictureBox——SizeMode属性

Normal ——标准模式, 在此模式下, 图片位于PictureBox的左上角, 图片的大小由PictureBox控件的大小决定, 当图片的大小大于PictureBox的尺寸时, 多余的图像将被剪切掉StretchImage——PictureBox会根据自身的长宽比例. 来调整图片的长宽比例, 使图片在PictureBox中完整显示出来…

基于Fuzzing和ChatGPT结合的AI自动化测试实践分享

一、前言 有赞目前&#xff0c;结合insight接口自动化平台、horizons用例管理平台、引流回放平台、页面比对工具、数据工厂等&#xff0c;在研发全流程中&#xff0c;已经沉淀了对应的质量保障的实践经验&#xff0c;并在逐渐的进化中。 在AI能力大幅进步的背景下&#xff0c…

Maven 从入门到精通

目录 一. 前言 二. Maven 下载与安装 2.1. 下载 2.2. 安装 三. Maven 核心概念 3.1. POM 3.2. 约定的目录结构 3.3. 坐标 3.4. 依赖管理 3.4.1. 直接依赖和间接依赖 3.4.2. 依赖的排除 3.4.3. 统一的版本管理 3.4.4. 依赖范围 3.5. 仓库 3.6. 生命周期/插件/目标…

vue3怎么获取el-form的元素节点

在元素中使用ref设置名称 在ts中通过从element-plus引入formInstance,设置formRef同名名称字段来获取el-form节点

HackTheBox-Starting Point--Tier 1---Funnel

文章目录 一 题目二 实验过程三 利用SSH隧道3.1 本地端口转发 一 题目 Tags FTP、PostgreSQL、Reconnaissance、Tunneling、Password Spraying、Port Forwarding、Anonymous/Guest Access、Clear Text Credentials译文&#xff1a;FTP、PostgreSQL、侦察、隧道技术、密码喷洒…

WordPress相关文章推荐

首先 WordPress 本身并没有相关文章的推荐功能&#xff0c;网站之所以需要这样的功能出于两个原因&#xff0c;一方面是推荐相关的内容越优质&#xff0c;访客的留存和继续阅读将会增强&#xff0c;同样从优化角度来说会更加有利于搜索引擎抓取时对页面质量的提升&#xff0c;毕…

AD9371 官方例程 NO-OS 主函数 headless 梳理(一)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

RPA处理重复工作,助力高效资金管理

在瞬息万变的市场竞争中&#xff0c;众多企业开展多元化经营以获取最大的经济效益。然而&#xff0c;企业的多元化经营程度越高&#xff0c;协调活动可能造成的决策延误也越多&#xff0c;其资金管理往往将面临更大的考验。随着新技术的发展&#xff0c;更多具备多元产业的企业…

【蓝桥杯选拔赛真题15】C++三个数排序 第十二届青少年组蓝桥杯C++选拔赛真题解析

目录 C/C++排序 一、题目要求 1、编程实现 2、输入输出 二、算法分析

【Redis】Redis与SSM整合Redis注解式缓存Redis解决缓存问题

一&#xff0c;Redis与ssm整合 1.1 pom.xml配置 在pom.xml中配置相关的redis文件 redis文件&#xff1a; <redis.version>2.9.0</redis.version> <redis.spring.version>1.7.1.RELEASE</redis.spring.version><dependency><groupId>red…