讲讲js中的prototype和__proto__

在Javascript中,prototype和__proto__是两个重要的概念,在对象的原型链中扮演重要的角色。

prototype

  • prototype是js函数的内置属性,每个函数都有一个prototype属性,它是一个指针,指向一个对象(原型对象)。这个对象包含了所有实例对象(new)的公共属性和方法。
  • 通过修改prototype对象的属性,可以为所有基于该构造函数的实例添加新的方法或属性。这种机制是js实现集成的主要方法之一。

__proto__

  • __proto__是对象的内置属性,它指向该对象的原型对象。这个属性在ES标准定义中的名字应该是[[Prototype]],但是由于历史原因和浏览器兼容性考虑,js为对象添加了__proto__属性以方便访问和修改原型链。
  • proto__并不是js语言本身的特性,而是各大厂商约定的私有属性。不建议在项目中直接使用__proto,推荐使用Object.getPrototypeOf()方法获取实例对象的原型。
  • 当访问一个对象的属性时,如果内部没有该属性,就会在它的__proto__属性所指的那个父对象去找,父对象没有,再去父对象的父对象里找,知道null,即原型链的末端。

prototype__proto__的联系和区别

  • prototype与__proto__都指向原型对象,任意一个函数(包括构造函数)都有一个prototype属性,指向该函数的原型对象。任意一个构造函数的实例化对象,都有一个__proto__属性,它指向构造函数(new)的原型对象(prototype).
  • prototype属性是函数独有的,而__proto__是每个对象都有的(包括实例对象、函数)。
  • prototype的作用是保存所有实例公共的属性和方法;__proto__的作用是当访问一个对象的属性时,如果内部没有该属性,就回去它的__proto__属性所指的那个父对象去找。

总结: 通过理解这两个概念,可以帮助我们更好的掌握js的继承和原型链机制,原型是js面向对象编程的核心之一。

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

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

相关文章

信息学奥赛初赛天天练-36-CSP-J2021阅读程序-ASCII、运算符优先级、二进制补码存储、模拟算法应用

PDF文档公众号回复关键字:20240626 2021 CSP-J 阅读程序2 1 阅读程序(判断题1.5分 选择题3分 共计40分 ) #include<stdio.h> #include<string.h>char base[64]; char table[256]; char str[256]; char ans[256];void init() {for(int i0;i<26;i) base[i]Ai;fo…

MySQL之可扩展性(四)

可扩展性 向外扩展 分片?还是不分片&#xff1f; 这是一个问题&#xff0c;对吧&#xff1f;答案很简单:如非必要&#xff0c;尽量不分片。首先看是否能通过性能调优或者更好的应用或数据库设计来推迟分片。如果能足够长时间地推迟分片&#xff0c;也许可以直接购买更大地服…

MySQL添加外键约束经典案例

1DDL建表语句 需要一个emp员工表和一个dept部门表 CREATE TABLE emp (id int NOT NULL AUTO_INCREMENT,name varchar(50) COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT 姓名,age int DEFAULT NULL COMMENT 年龄,job varchar(20) COLLATE utf8mb4_0900_as_ci DEFAULT NULL CO…

黑马程序员——Spring框架——day09——linux初级

目录&#xff1a; 前言 什么是Linux&#xff1f;为什么要学Linux 企业用人要求个人发展需要学完Linux能干什么 1).环境搭建2).常用命令3).安装软件4).项目部署小结2.Linux简介 主流操作系统Linux发展历史Linux系统版本Linux安装 安装方式介绍安装VMware安装Linux网卡设置安装S…

flink 处理函数和流转换

目录 处理函数分类 概览介绍 KeydProcessFunction和ProcessFunction 定时器TimeService 窗口处理函数 多流转换 分流-侧输出流 合流 联合&#xff08;Uniion&#xff09; 连接&#xff08;connect&#xff09; 广播连接流&#xff08;BroadcatConnectedStream&#xf…

Python列表函数append()和extend()的区别

Python列表提供了两个容易混淆的追加函数&#xff1a;append()和extend()。它们之间的使用区别如下&#xff1a; list.append(obj)&#xff1a;对象进栈。将一个对象作为整体追加到列表最后&#xff0c;返回Nonelist.extend(iter)&#xff1a;可迭代对象的元素逐个进栈。将一个…

数据结构——

1. 什么是并查集&#xff1f; 在计算机科学中&#xff0c;并查集&#xff08;英文&#xff1a;Disjoint-set data structure&#xff0c;直译为不数据结构交集&#xff09;是一种数据结构&#xff0c;用于处理一些不交集&#xff08;Disjoint sets&#xff0c;一系列没有重复元…

6毛钱SOT-23封装28V、400mA 开关升压转换器,LCD偏置电源和白光LED应用芯片TPS61040

SOT-23-5 封装 TPS61040 丝印PHOI 1 特性 • 1.8V 至 6V 输入电压范围 • 可调节输出电压范围高达 28V • 400mA (TPS61040) 和 250mA (TPS61041) 内部开关电流 • 高达 1MHz 的开关频率 • 28μA 典型空载静态电流 • 1A 典型关断电流 • 内部软启动 • 采用 SOT23-5、TSOT23…

gbase8s并行的开启和查看-2

1. 使用测试-当前环境 环境变量 [gbasedbtnode01 ~]$ cat profile.node1 export GBASEDBTSERVERnode1 export GBASEDBTDIR/home/gbasedbt/gbase export GBASEDBTSQLHOSTS/home/gbasedbt/gbase/etc/sqlhosts.node1 export ONCONFIGonconfig.node1 export PATH/home/gbasedbt/g…

yaml是什么文件.SO是什么文件

YAML 文件是一种人类可读性高、易于理解的数据序列化格式文件&#xff0c;常用于配置文件、数据交换等场景。YAML 的全称递归地缩写为 "YAML Aint a Markup Language"&#xff08;YAML 不是一种标记语言&#xff09;&#xff0c;意在强调它关注数据结构而非文档标记。…

input()函数——输入

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 input()函数可以提示并接收用户的输入&#xff0c;将所有的输入按照字符串进行处理&#xff0c;并返回一个字符串&#xff0c;input()函数的…

操作符详解(上) (C语言)

操作符详解&#xff08;上&#xff09; 一. 进制转换1. 二进制2. 二进制的转换 二. 原码 补码 反码三. 操作符的分类四. 结构成员访问操作符1. 结构体的声明2. 结构体成员访问操作符 一. 进制转换 1. 二进制 在学习操作符之前&#xff0c;我们先了解一些2进制、8进制、10进制…

modelsim做后仿真的一点思路

这是以TD_5.6.3_Release_88061生成的网表文件&#xff08;其他工具生成的网表文件类似&#xff09;&#xff0c;与modelsim联合进行门级仿真的样例&#xff0c;时序仿真与门级仿真的方法类似&#xff0c;只是增加了标准延时文件。 1、建立门级仿真工程 将门级网表和testbench添…

vivado SLR

描述 超级逻辑区&#xff08;SLR&#xff09;是包含在堆叠硅中的单个FPGA芯片 互连&#xff08;SSI&#xff09;设备。堆叠式硅互连&#xff08;SSI&#xff09;技术使用无源硅 具有微凸块和硅通孔&#xff08;TSV&#xff09;的内插器&#xff0c;用于组合多个FPGA管芯 切片&a…

盲信号处理的发展现状

盲源分离技术最早在上个世纪中期提出&#xff0c;在1991年Herault和Jutten提出基于反馈神经网络的盲源分离方法&#xff0c;但该方法缺乏理论基础&#xff0c;后来Tong和Liu分析了盲源分离问题的可辨识性和不确定性&#xff0c;Cardoso于1993年提出了基于高阶统计的联合对角化盲…

全球无界,语言无阻——魔众帮助中心(多语言)系统全新升级!

&#x1f389;亲爱的用户们&#xff0c;你们好&#xff01;今天&#xff0c;我要向大家隆重介绍一个颠覆传统&#xff0c;助力全球用户的利器——魔众帮助中心(多语言)系统的全新升级版本&#xff01;&#x1f31f; &#x1f310;在这个日益全球化的时代&#xff0c;魔众帮助中…

【ARM Trace32(劳特巴赫) 使用介绍 2.7 -- bat 脚本传参数给 trace32 cmm 脚本】

请阅读【Trace32 ARM 专栏导读】 文章目录 bat 脚本传参数给 trace32脚本可变参数传入CMM 脚本接收参数运行BAT脚本bat 脚本传参数给 trace32脚本 在使用 Trace32 的过程中,如果每次都是通过GUI 界面来操作,是习惯使用命令行工作的人所不能忍受的!!!,那么能不同通过脚本…

如何下载植物大战僵尸杂交版,最全攻略来了

《植物大战僵尸杂交版》由热爱原版游戏的B站UP主“潜艇伟伟迷”独立开发&#xff0c;带来了创新的游戏体验。如果你是策略游戏的爱好者&#xff0c;下面这份全面的下载和游玩攻略将是你的理想选择。 游戏亮点&#xff1a; 杂交植物系统&#xff1a;结合不同植物特性&#xff0c…

CMakeList.txt 与makefile文件介绍

在C 项目中&#xff0c; 我们经常可以看到CMakeList.txt 文件和makefile文件&#xff0c; 那么它们分别有什么用呢&#xff1f; 下面的图示很好地解释了它们的作用以及两者之间的关系。

AbstractApplicationContext#refresh

spring 关键方法 org.springframework.context.support.AbstractApplicationContext#refresh 这个方法 是 线程安全的 synchronized (this.startupShutdownMonitor) { } 第一步&#xff0c;资源相关&#xff0c;初始化 属性资源 并验证 org.springframework.context.support.Ab…