通俗讲解javascript的实例对象、原型对象和构造函数以及它们之间的关系

今天通俗讲解一下js的对象,因为要通俗,所以可能描述不甚准确。

在js中,想要创建一个对象,首先要写出构造函数(跟其它的语言不太一样哦,其它语言一般都会先写一个class 类名)。

构造函数写法如下(其实就是一个普通函数,不过,我们一般遵循类名第一个字母是大写的风俗,写成Person,其实写成person也没问题):

//Person是构造函数
function Person(name,age)
{this.name=name;this.age=age;
}

有了构造函数后,new一下构造函数,就会产生出一个“实例对象”。

//p1是实例对象
var p1=new Person("张三",20);
console.log(p1)

有了实例对象p1后,p1有一个constructor属性,这个属性等于它的构造函数

console.log(p1.constructor === Person)

这就是一个对应关系:

构造函数--------------new-------------实例对象

实例对象 --------constructor--------构造函数

那么,这个构造函数、实例对象所对应的原型对象(类)是什么呢?

来了,在构造函数Person有一个prototype的属性,它就指向原型对象(类)。

console.log(Person.prototype)

运行结果(原型对象,而且其中有一个构造函数Person。【类中就是应该有一个构造函数】): 

构造函数--------------new-------------实例对象

实例对象 --------constructor--------构造函数

构造函数-----------prototype---------原型对象(类)

原型对象(类)----constructor----构造函数

好,既然有了原型对象(类),那么,我就可以在类中添加方法了。

//在原型对象(类)中添加方法
Person.prototype.eat=function(){console.log('吃饭');
}

既然类中有了新的方法,那么刚才生成的实例对象p1,也应该有这个新方法了,确认一下:

运行结果(证明是可以的): 

 至此,我们建立了如下关系:

构造函数--------------new-------------实例对象

实例对象 --------constructor--------构造函数

构造函数-----------prototype---------原型对象(类)

原型对象(类)----constructor----构造函数

似乎缺少点什么?

是的,那就是实例对象和原型对象(类)之间的关系。

刚才的测试我们已经可以确认,如果在类中添加了新的方法,对应的实例对象中,也可以使用这个方法,那么实例对象和原型对象(类)之间怎么建立的这种联系呢?

直接给出:实例对象中有一个__proto__属性,指向了原型对象(类)。

实例对象 ---------__proto__---------原型对象(类)。

下面有来了新的问题,实例对象p1中,并没有eat的方法【eat方法是原型对象(类)中的方法】,如下图

那么,实例对象(p1)为何能使用原型对象类(Person.prototype)中的方法呢?

方法:实例对象先看自己有没有这个方法,若有,执行;若没有,通过 __proto__找到上一级类看是否有方法,如果还没有,继续往上找,直至类成为null。

这就是原型链。

本质上是种“类的继承”的解决方法。

 所以,全面的关系如下:

构造函数-------------->new------------->实例对象

实例对象 -------->constructor-------->构造函数

构造函数----------->prototype--------->原型对象(类)

原型对象(类)---->constructor---->构造函数

实例对象 --------->__proto__>---------原型对象(类)

最后再说一点,其实可以在浏览器的console中看到原型链的情况。

构造函数Person生成的实例对象p1,只有age,name,sleep(),如果运行p1.eat(),其会通过__proto__找到它的原型函数中的eat()执行。

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

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

相关文章

Transformer-LSTM网络的轴承寿命预测,保姆级教程终于来了!

概要 关于轴承寿命预测,网络上的文章、代码层出不穷,但是质量却是令人堪忧,有很多文章甚至存在误导嫌疑。本期代码是在小淘怒肝好几个夜晚整理出来的,本期代码可以帮你迅速掌握一个轴承寿命预测的全过程。 为了不误导我的读者朋…

YOLOv5独家改进:严重遮挡和重叠目标场景解决方案 | 一种新的自适应算法轻量级通道分割和变换(ALSS)模块,自适应特征提取优化策略

💡💡💡本文解决什么问题:红外检测场景存在严重遮挡和重叠目标时的局限性的问题点。 💡💡💡提出了一种新的自适应算法轻量级通道分割和变换(ALSS)模块。该模块采用自适应信道分裂策略优化特征提取,并集成信道变换机制增强信道间的信息交换。这改善了模糊特征的提…

【d48】【Java】【力扣】LCR 123. 图书整理 I

思路 方法1:放进list,将list倒置,利用stream,将list改为int类型 方法2:递归:递归通用思路;明确每一层做什么确定返回值确定什么地方接收下层的返回值 每一层:调用下层,然后把自己…

Oracle AI理论与实践,企业落地篇干货满满

最近也是看到了圈子里的一位DBA好友,领导安排的工作是让负责AI的落地,而且也作为他业绩考核的指标,作为1名15年的DBA老兵来说,让AI落地面临的困难重重。 AI已经逐渐侵入到实际的生活中,最近我也是参加了Oracle官方在中…

【py】计算字母出现次数 字典储存

代码 用于计算用户输入字符串中每个字母字符的出现频率: from collections import Counter def calculate_character_frequency(): # 获取用户输入的字符串 user_input input("请输入一个字符串:") # 将字符串转换为小写…

摄影社团管理系统

基于springbootvue实现的摄影社团管理系统 (源码L文ppt)4-075 第四章 系统概要设计 4.1系统设计原理 设计原理是指系统的设计来源,它将需求合理地分解为功能,并抽象地描述系统的模块和其下的功能。在功能模块化后&#xff…

DeiT(ICML2021):Data-efficient image Transformer,基于新型蒸馏且数据高效的ViT!

Training data-efficient image transformers & distillation through attention:通过注意力训练数据高效的图像转换器和蒸馏 论文地址: https://arxiv.org/abs/2012.12877 代码地址: https://github.com/facebookresearch/deit 这篇论文…

KDD2024 时序论文(Time Series)

1、Generative Pretrained Hierarchical Transformer for Time Series Forecasting paper: https://dl.acm.org/doi/abs/10.1145/3637528.3671855 code:GitHub - SiriZhang45/FRNet: Code Implementation of FRNet 2、Fredformer: Frequency Debiased Transforme…

一文教你分不清路由器、交换机、光猫的概念,协助你对路由模组选型

当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成部分,承担着连接、传输和管理数据的重要任务。在日常生活和工作中,我们几乎离不开它们的存在,无论是在家中上网、办公室内…

Java:日期操作

目录 1、生成20240605180212格式的时间2、Date类型转LocalDate类型3、LocalDate类型基本操作4、格式化日期格式5、String 与 LocalDateTime 之间的转换6、生成指定时间段内的时间列表 1、生成20240605180212格式的时间 String dateTime LocalDateTime.now().format(DateTimeF…

【成品论文】2024年华为杯研究生数学建模A题成品论文

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 【全网最全】2024年华为杯研赛A题保奖思路matlab/py代码成品论文等(后续会更新完整 点击链接获取群聊【2024华为杯研赛资料汇总】:https://qm.q…

Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】

Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】 目录 Unity 设计模式 之 行为型模式 -【状态模式】【观察者模式】【备忘录模式】 一、简单介绍 二、状态模式(State Pattern) 1、什么时候使用状态模式 2、使用状态模式的…

力扣516-最长回文子序列(Java详细题解)

题目链接:力扣516-最长回文子序列 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。 5.如果没有ac打印dp数组 利于debug。 每…

接口测试Postman关联,断言,前置,参数化用法

一、Postman下载 我们直接搜索Postman官网下载即可 Postman API Platformhttps://www.postman.com/ 二、使用 下载安装完成后我们需要登录注册,按照Postman的指示进行注册登录,不登陆可能有些功能无法使用 登陆完成我们就可以开始对接口进行测试了 …

C++速通LeetCode中等第27题-二叉树展开为链表(两种迭代法)

迭代法一:额外容器,前序遍历暴力求解(空间O(n)) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …

Tableau|一入门

一 什么是BI工具 BI 工具即商业智能(Business Intelligence)工具,是一种用于收集、整理、分析和展示企业数据的软件系统,其主要目的是帮助企业用户更好地理解和利用数据,以支持决策制定。 主要功能: 1.数据…

springboot在线教学平台

基于springbootvue实现的在线教学平台 (源码L文ppt)4-069 4.1系统结构设计 这些功能可以充分满足在线教学平台的需求。此系统功能较为全面如下图系统功能结构如图4-1所示。 图4-1功能结构图 4.2系统功能模块设计 在线教学平台的使用者主要有二类…

技术速递|宣布 Azure Container Apps 上的 Java 体验正式推出

作者:Sean Li 排版:Alan Wang Azure Container Apps 是一个完全托管的、无服务器容器平台,使您能够构建、部署和运行容器化应用程序。使用 Azure Container Apps 您可以弹性扩缩容。您可以使用统一的网络设计弹性微服务,并利用启用…

频率增强通道注意力机制(FECAM)学习总结

本文提出了一种新的频率增强通道注意力机制(FECAM),旨在解决时间序列预测中傅里叶变换因吉布斯现象导致的高频噪声问题。FECAM基于离散余弦变换,能自适应地模拟信道间的频率依赖性,有效避免预测误差。实验显示&#xf…

赛意SMOM和金蝶云星空接口打通对接实战

赛意SMOM和金蝶云星空接口打通对接实战 对接源平台:赛意SMOM 赛意信息已经发展成为国内企业数字化服务领域最具发展潜力的领军企业之一,聚焦于工业互联网、智能制造、新一代信息技术、数字化转型等领域的技术与商业模式应用,为企业提供高端软件咨询、实施…