原型链解释

news2025/1/6 18:35:07

一、什么是原型链

原型链是javascript中用来实现类似类继承的一套机制。像链条一样把javascript中的对象连接起来,实现类似子联系父的现象。

二、原型链的实现

总的来说,就是:

  • 对象的__proto__指向其构造器的prototype对象,然后该prototype对象的__proto__指向Function的prototype对象,最后该prototype对象的__proto__指向Object的prototype对象。
  • 对象的prototype对象中的constructor属性指向其构造器对象,不过constructor属性一般没什么用,不需要考虑。
    实际上原型链是通过__proto__来实现的,因为__proto__一直指向的都是prototype对象,给人的感觉就是顺着prototype对象查找的
    忽略__proto__,那么原型链的查找顺序链有两条,分别是:
    • 对象——构造器原型对象——Object原型对象
    • 构造器(函数)对象——Function原型对象——Object原型对象

三、一些测试

  • 对象真的没有prototype属性?

Object对象除外

  • 对象的__proto__指向构造器的prototype对象?

  • 构造器的prototype对象的__proto__指向Object的prototype对象?

即使特殊如Function和Object对象也是如此,Object的构造器是Function

  • 函数(构造器)对象的__proto__指向Function的prototype对象?

其实,也就是对象__proto__指向构造器的prototype对象

  • Function对象的__proto__指向其prototype对象?

Function的构造器指向其prototype对象,是比较特殊的,那么是不是意味着它的构造器是其本身,这个不太清楚

四、一些解释

  • 扩充函数

  Function.prototype.method = function(){}

上面扩充的method函数对象(包括全局对象浏览器中为window对象)并不能访问到,而函数可以访问到。这是因为对象的原型链不经过Function.prototype,而函数经过。而Object.prototype.method=function(){}不管函数还是对象都可以访问。

  • 扩充函数的改进

  Function.prototype.method = function(name, func){
    if(!this.prototype[name]){
      this.prototype[name] = func;
    }
    return this; 
  }
  Array.method('method', function(){
    // some code here
  });

上面代码通过给Function的原型对象添加一个method方法,用于给各函数(构造器)添加原型方法。
Array.method(‘arrayMethod’,function(){});就是给Array的原型对象添加了arrayMethod方法,那么Array构造的对象就可以访问到这个方法。不过,使用Array.arrayMethod就不能访问这个方法。

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

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

相关文章

上半年实现营收9.24亿元,创新奇智的AI成制造业福星?

如今,AI大模型迈入了商业化落地的新阶段,并且已经有不少产品被不知不觉地应用到了生活各个方面。 其中,作为AI领域的后起之秀,创新奇智也于近日发布了截至2023年6月30日止六个月的中期业绩报告。数据显示,创新奇智202…

新建的SFTP用户,连接报错

useradd -m -d /usr/local/data/ftp/abc abc 新建SFTP用户 usermod -g sftpgroup -G sftpgroup abc 将abc加入到sftpgroup组 Received disconnect from 192.168.10.2 port 22:2: Too many authentication failures Disconnected from 192.168.10.2 port 22 Connection clos…

6、DVWA——SQL injection

文章目录 一、概述二、low2.1 通关思路(1)判断是否存在sql注入漏洞。(2)判断字符型还是数字型(3)判断字段数(4)查看回显点(5)查看数据库名(6&…

R730xd风扇调速

共使用了三个方法都是有效的,dell_fans_controller_v1.0.0和Dell_EMC_Fans_Controller_1.0.1以及ipmitool,前面两个是GUI界面后面一个是命令行工具 重点 我虽然能通过设置的ip地址能访问idrac管理界面,但是使用上面三个工具都是无法获取风扇…

C++:模板(函数模板、类模板)

本文主要介绍泛型编程、函数模板和类模板。 目录 一、泛型编程 二、函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 4.函数模板的实例化 5.模板参数的匹配原则 三、类模板 1.类模板的定义格式 2.类模板的实例化 一、泛型编程 如何实现一个通用的交换函数…

普通的maven里面没有配置tomcat服务器问题

上面的意思也就是可以直接如下访问 他会直接给我们跳转到 webapp下面的index.jsp页面 为什么跳转到这个页面呢,原因在于我们在tomcat服务器里面的配置文件web.xml做了如下配置 只要webapp下面有如上几个页面,就会被默认运行 如果运行中出现控制台中文…

2023年8月京东彩瞳行业数据分析(京东商品数据)

和传统的框架眼镜、隐形眼镜相比,多种花纹、颜色的美瞳镜片给了爱美的年轻人更多的选择,因此,在颜值经济叠加悦己思潮的影响下,兼具“视力矫正美妆”的彩瞳受追捧。 根据鲸参谋电商数据分析平台的相关数据显示,8月份&…

TorchAudio has CUDA version 11.7.

RuntimeError: Detected that PyTorch and TorchAudio were compiled with different CUDA versions. PyTorch has CUDA version 11.8 whereas TorchAudio has CUDA version 11.7. Please install the TorchAudio version that matches your PyTorch version.升级版本即可 pi…

HTML导航栏二级菜单(垂直、水平方向)

二级菜单是指主菜单的子菜单。菜单栏实际是一种树型结构&#xff0c;子菜单是菜单栏的一个分支。简单分享主要的垂直和水平方向的CSS设计。 垂直方向&#xff1a; HTML: <body><div><ul><li><a href"#">家用电器</a><ul>…

VRTK4⭐三.VRTK4 : 射线传送模块 [包含API传送]

文章目录 &#x1f7e5; 项目配置方法1️⃣ 添加相应模块2️⃣ 配置相关属性3️⃣ 体验一下吧 &#x1f7e7; 传送组件讲解&#x1f7e8; Locomotors.Teleporter.Dash : 缓动传送&#x1f7e9; API 传送示例 &#x1f7e5; 项目配置方法 1️⃣ 添加相应模块 我们要实现的功能…

10:STM32------I2C通信

目录​​​​​​​ 一:I2C通信协议 1:I2C简历 2:硬件电路 3:I2C时序基本单元 A : 开/ 终条件 2:发送一个字节 3:接收一个字节 4:应答机制 4:I2C时序 1:指定地址写 2:当前地址读 3: 指定地址读 二:MPU6050 1:简历 2:参数 3:硬件电路 4:框图 5:寄存器地址 …

weblogic配置证书

1.windows安装jdk JDK 可以到官网下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 系统变量→新建 JAVA_HOME 变量 配置环境变量&#xff1a;右击“我的电脑”–>“高级”–>“环境变量” JAVA_HOME&#xff1a;D:\Java\j…

原型链(一定要搞懂啊!!!>-<)

一、概念 1、prototype 习惯称作“显示原型”&#xff0c;只有构造函数才有的属性。 2、构造函数 能用new关键字创建的对象叫做构造函数 3、__proto__ 习惯称作“隐式原型”&#xff0c;每一个实例都有的属性&#xff0c;该属性指向他构造函数的“显示原型”。Function对象…

iwebsec靶场 文件包含漏洞通关笔记2-文件包含绕过(截断法)

目录 前言 1.%00截断 2.文件字符长度截断法&#xff08;又名超长文件截断) 方法1&#xff08;路径截断法&#xff09; 方法2&#xff08;点号截断法&#xff09; 第02关 文件包含绕过 1.打开靶场 2.源码分析 3.00文件截断原理 4.00截断的条件 5.文件包含00截断绕过 …

传统大数据迁移遇到的问题与解决方案

信息技术的进步和普及使得各个领域都在持续产生和积累大量的数据&#xff0c;这些数据蕴含了丰富的信息和价值&#xff0c;被称为大数据。据国际权威机构IDC预测&#xff0c;到2025年&#xff0c;全球数据总量将达到175ZB&#xff08;1ZB1024EB1024^7B&#xff09;&#xff0c;…

YOLOv5的常见报错总结

目录 1.安装pycocotools报错 2.Cant get attribute SPPF on module models.common 2.1原因 2.2解决方案 3.[WinError 1455] 页面文件太小&#xff0c;无法完成操作 3.1原因 3.2解决方案 4.AssertionError: Image Not Found D:\PycharmProjects\yolov5-hat\VOCdevkit\im…

centos安装flink,通过windows访问webui

1. 安装flink 1.1. flink的下载 通过flink官网下载flink安装包 https://flink.apache.org/ 下载安装包 1.2 flink在centos上的安装 将下载好的flink-1.17.1-bin-scala_2.12.tgz安装包放到centos目录下 解压文件&#xff1a; [rootlocalhost ~]# tar -zxvf flink-1.17.…

Vue3常用语法记录,基础使用看这篇就够了

1、ref const test ref<number>(8) 2、reactive const testObj reactive({test001: ,test002: }) 3、props & defineEmits defineProps({icon: String, }); const emit defineEmits([change, update:value, format-error]); emit(update:value, v); 4、wat…

DataGrip实时模板的配置2.0

印象里一直记着配置过代码实时模板&#xff0c;但是忘了换了工作电脑&#xff0c;之前配置的模板在我另一台电脑上 需要重新配置一下&#xff0c;我是笨蛋orz 配置方法和之前的一致 DataGrip实时模板的配置_王小小鸭的博客-CSDN博客https://blog.csdn.net/clover_oreo/articl…

9月11日上课内容 第二章 GFS 分布式文件系统

本章结构 前言 存储 块存储 硬盘 文件存储 nfs lvm raid ext4 ext3 centos6 xfs centos7 对象存储 GFS Ceph fastdfs 云端 OSS 阿里云存储 url链接 S3 亚马逊 …