原型对象的简单了解

news2025/1/13 7:36:36

       在前面学习java有一个概念叫做继承,方便我们对父类方法、变量等的调用。对前端的学习我们需要让对象可以访问和继承其他对象的属性和方法,就需要了解原型对象,以及原型链。

一、原型

       构造函数通过原型分配的函数是所有对象所共享的。每一个构造函数都有一个prototype属性,指向另一个对象,所以我们也称为原型对象。

       因此我们可以把不变的方法,直接定义在prototype对象上,方便所有对象的实例共享这些方法,节约内存。
构造函数和原型对象中的this 都指向实例化的对象

二、原型对象

       在JavaScript中,当我们创建一个函数, 那么浏览器就会在内存中创建一个对象,而且每个函数都默认会有一个属性 prototype 指向了这个对象。这个对象就是该函数的原型对象,简称函数的原型。这个原型对象 默认会有一个属性 constructor 指向了这个函数。

示意图如下:

 代码示例:

<script>
    //公共的属性写到构造函数里
  function f(uname,age){
    this.uname=name;
    this.age=age;
  }
  //向原型里添加方法
    //公共的方法添加到原型对象里
  f.prototype.sing=function () {
      console.log('唱歌');
  }
  // 实例化对象
  const people1=new f('tim',20);
  const people2=new f('tom',30);
  people1.sing();
  people2.sing();
  console.log(people1.sing() === people2.sing())
</script>

三、对象原型 

    当我们实例化时,为什么可以共享对象原型里的方法?

       对象都会有一个属性_ _proto_ _ 指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有__proto 原型的存在。对象原型指向原型对象。

示意图如下:

代码演示:

<script>
    function people(){

    }
    const p1=new people();
    console.log(p1.__proto__);
    //原型对象指向对象原型
    console.log(p1.__proto__===people.prototype);
    //示例对象里有constructor属性指向构造函数
    console.log(p1.__proto__.constructor===people);
</script>

四、原型链

1、什么是原型链?

       每个对象都有一个_ _proto_ _指向其原型对象,而原型对象本身也是一个对象,也具有自己的原型对象,这样就形成了一个对象与其原型对象之间的链接,构成了原型链。

2、代码示例

<script>
    console.log(Object.prototype)
    function people(){

    }
    const p1=new people();
    console.log(p1.__proto===people.prototype)
    console.log(people.prototype.__proto===Object.prototype)
</script>

3、示意图

    当我们访问对象的属性或方法时,JavaScript 引擎首先会在对象自身查找,如果找到则返回对应的值;如果在对象自身找不到,引擎会沿着原型链往上一级一级地查找,直到找到该属性或方法的定义或者到达原型链的顶端(即 Object.prototype),如果还没有找到,则返回 undefined。

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

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

相关文章

SpringBoot Vue 微人事(十)

职位管理前后端对接问题解决 因为mysql字段关联其他表&#xff0c;进行约束了&#xff0c;删除不了的&#xff0c;就报未知错误是不合适的 需要在后端写一个全局异常类 删掉了MySQLIntegrityConstraintViolationException这个异常类才能导包&#xff0c;能用 RestController…

AutoSAR系列讲解(深入篇)13.6-Mcal Mcu时钟的配置

目录 一、EB的Mcu模块结构 二、时钟的配置 对Mcu的配置主要就是其时钟树的配置,但是EB将GTM、ERU等很多重要的模块也都放在了Mcu里面做配置,所以这里的Mcu是一个很庞大的模块, 我们目前只讲时钟树的部分 一、EB的Mcu模块结构 1. 所有的模块都基本上是这么些配置类别,Mc…

Spark 图计算ONEID 进阶版

0、环境信息 本文采用阿里云maxcompute的spark环境为基础进行的&#xff0c;搭建本地spark环境参考搭建Windows开发环境_云原生大数据计算服务 MaxCompute-阿里云帮助中心 版本spark 2.4.5&#xff0c;maven版本大于3.8.4 ①配置pom依赖 详见2-1 ②添加运行jar包 ③添加配置信…

SAP SQL/CDS新功能货币汇率转换CURRENCY_CONVERSION( p1 = a1, p2 = a2, … )

1. 示例 PARAMETERS: p_waers TYPE mseg-waers OBLIGATORY DEFAULT USD.SELECT SUM( currency_conversion( amount a~hsl, "转换的金额source_currency b~isocd, "源货币target_currency p_waers, "目标货币exchange_rate_dat…

ClickHouse(二十一):Clickhouse SQL DDL操作-临时表及视图

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

Bean 作用域、生命周期和Spring执行流程

文章目录 Bean作用域问题案例分析公共 BeanA 用户使用时修改B 用户使用时原因分析 作用域定义Bean 的6种作用域singletonprototyperequestsessionapplicationwebsocket 设置作用域 Spring 执行流程1、启动容器2、Bean 初始化3、注册Bean对象到容器中4、装配Bean属性 Bean 生命周…

【C++11新特性】右值引用和移动语义

文章目录 1. 左值与右值1.1 左值与右值对比1.2 左值引用与右值引用 2. 右值引用的使用场景2.1 左值引用的短板2.2 右值引用和移动语义2.3 右值引用对左值的引用 3. 完美转发3.1 万能引用3.2 完美转发保持值的属性 1. 左值与右值 1.1 左值与右值对比 左值的概念 左值是一个表示…

13 MySQL

文章目录 MySQL基本使用安装RDBMS使用Navicat新建数据库新建查询--即代码运行的地方运行代码表的操作 命令行连接数据完整性数据类型约束 SQL的基础语法特性&#xff1a;SQL语句的分类DDL库管理 DDL表管理&#xff1a;DML(增删改)新增删除更新 DQL(查)DQL基础查询as 取别名消除…

Java查看https证书过期时间(JKS,CERT)

在这里需要使用X.509 证书的抽象类 X509Certificate 。此类提供了一种访问 X.509 证书所有属性的标准方式。 这些证书被广泛使用以支持 Internet 安全系统中的身份验证和其他功能。常见的应用包括增强保密邮件 (PEM)、传输层安全 (SSL)、用于受信任软件发布的代码签名和安全电…

MongoDB 数据库

目录 一、概述 二、相关概念 三、特性 四、应用的场景 五、安装及配置文件操作 一、首先配置好环境 二、安装 三、查看端口号 四、查看配置文件 五、查询已安装的软件包 六、树状图解析 六、默认数据库&#xff08;默认有admin、local、config三个&#xff09; 一…

Java后端开发面试题篇——Redis

Redis的数据持久化策略有哪些 RDB的执行原理&#xff1f; bgsave开始时会fork主进程得到子进程&#xff0c;子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。 fork采用的是copy-on-write技术&#xff1a; 当主进程执行读操作时&#xff0c;访问共享内存…

SQL-每日一题【1587. 银行账户概要 II】

题目 表: Users 表: Transactions 编写解决方案, 报告余额高于 10000 的所有用户的名字和余额. 账户的余额等于包含该账户的所有交易的总和。 返回结果表单 无顺序要求 。 查询结果格式如下例所示。 示例 1&#xff1a; 解题思路 1.题目要求我们查询出额高于 10000 的所有…

Yalmip入门教程(5)-约束条件操作的相关函数

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译&#xff1a;https://yalmip.github.io/tutorials/ 这篇博客将详细介绍yalmip工具箱中约束条件操作相关函数的用法。 1.约束条件操作的相关函数 1.1 boundingbox函数 boundingbox函数用于求出一组约…

Java基本变量

概念&#xff1a; 本质上来说变量是内存中的一小块区域&#xff0c;通过变量名来访问这块区域。因此&#xff0c;使用每一个变量前必须要先申请&#xff08;声明&#xff09;然后必须对其进行赋值&#xff0c;才能使用。 基本数据类型&#xff08;在栈stack中&#xff09; 整…

【从0开始学架构笔记】01 基础架构

文章目录 一、架构的定义1. 系统与子系统2. 模块与组件3. 框架与架构4. 重新定义架构 二、架构设计的目的三、复杂度来源&#xff1a;高性能1. 单机复杂度2. 集群复杂度2.1 任务分配2.2 任务分解&#xff08;微服务&#xff09; 四、复杂度来源&#xff1a;高可用1. 计算高可用…

Python爬虫解析工具之xpath使用详解

文章目录 一、数据解析方式二、xpath介绍三、环境安装1. 插件安装2. 依赖库安装 四、xpath语法五、xpath语法在Python代码中的使用 一、数据解析方式 爬虫抓取到整个页面数据之后&#xff0c;我们需要从中提取出有价值的数据&#xff0c;无用的过滤掉。这个过程称为数据解析&a…

网络技术Vlan技术STP(第一课)

一 Vlan技术的学习 对命令的增删改查 #### 1&#xff09;创建vlan[SW1]vlan 2 [2-4094] 创建vlan[SW1]vlan batch 10 20 30 创建多个不连续的vlan[SW1]display vlan 查看vlan信息[SW1]vlan batch 50 to 60创建多个连续的vlan[SW1]vlan2[SW1-vlan2]description caiwu添加描述信…

基于决策树(Decision Tree)的乳腺癌诊断

决策树(DecisionTree)学习是以实例为基础的归纳学习算法。算法从--组无序、无规则的事例中推理出决策树表示形式的分类规则,决策树也能表示为多个If-Then规则。一般在决策树中采用“自顶向下、分而治之”的递归方式,将搜索空间分为若千个互不相交的子集,在决策树的内部节点(非叶…

AutoSAR配置与实践(基础篇)3.3 BSW的通信功能

传送门 -> AUTOSAR配置与实践总目录 AutoSAR配置与实践&#xff08;基础篇&#xff09;3.3 BSW的通信功能 一、收发过程概览1.1 发送过程概览1.2 接收过程概览 二、BSW的通信功能模块组成三、收发过程解析3.1 发送过程3.2 发送后的结果确认3.3 接收过程 一、收发过程概览 1…

图像编程补充:计算机图形学和数字图像处理概念

一、计算机图形学 国际标准化组织&#xff08;ISO&#xff09;的定义&#xff1a;计算机图形学是研究通过计算机将数据转换为图形&#xff0c;并在专门显示设备上显示的原理、方法和技术的学科。 1.1什么是计算机图形学 图形的构成要素&#xff1a; 图形的广义概念&#xff1…