js原型和原型链_JS 构造函数与原型链

1ac9d30f7dcabc4f84cfb4f62c99f6dd.png

JavaScript 对象体系是基于构造函数和原型链的。继承不通过类,而是通过原型对象实现,原型对象的所有属性和方法,都能被实例对象共享。

构造函数(constructor)

在 JS 中想要生成可重用、可继承的对象就要使用构造函数:

  • 函数体内部使用了this关键字,代表了所要生成的对象实例。
  • 生成实例对象的时候,必须使用new命令。

new命令的原理:

  1. 创建一个新的空对象。
  2. 新对象的__proto__指向构造函数的prototype
  3. 新对象赋值给构造函数内部的 this 上下文,并开始执行构造函数。
  4. 如果构造函数没有显示返回对象,默认返回 this(即生成的实例)。

原型和原型链(__proto__、prototype)

  • 每个构造函数都有一个prototype属性指向原型对象,用来存放共有属性和方法的地址。
  • 每个实例对象都有一个__proto__属性指向构造函数的原型对象。

一个实例对象的原型就是它的构造函数的原型对象,原型对象的所有属性和方法,都能被实例对象共享,不仅节省了内存,还体现了实例对象之间的联系。

let arr = [1,2,3,4] 
arr.__proto__ === Array.prototype //true
Array.prototype.__proto__ === Object.prototype //true
Object.prototype.__proto__ === null //true

所有对象都有一个__proto__属性指向一个原型对象,从原型到原型的原型……这样就形成了一个“原型链”(prototype chain)。原型链的尽头就是null,null没有任何属性和方法,也没有自己的原型。

arr ---> Array.prototype ---> Object.prototype ---> null


ObjectFunction 的关系有点绕:

37a5f5641258b45a32e14c6321dbd1a1.png

Object的构造函数是Function。

Object.__proto__ === Function.prototype

Function的构造函数是它自己。

Function.__proto__ === Function.prototype

Function.prototype的构造函数是Object。

Function.prototype__proto__ === Object.prototype

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

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

相关文章

全球制造业的未来

来源:航空简报2020年3月4日,Brahima Coulibaly和Karim Foda在美国布鲁金斯学会官网刊文,分析了全球制造业的未来,提出了几个鲜明的观点:1.“比较优势”将发生转移,中等收入国家尤其是许多亚洲新兴经济体&am…

mybatis 批量修改_解放双手,不写SQL!一个开源 MyBatis 神器!!

什么是通用 Mapper?它是一个可以方便的使用 Mybatis 进行单表的增删改查优秀开源产品。它使用拦截器来实现具体的执行 Sql,完全使用原生的 Mybatis 进行操作。在 Github 上标星 9.6K!为什么要用 Mapper?它提供了所有单表的基本增删…

论文速读:AI能从人类的愚蠢中学到什么?

来源:混沌巡洋舰本文来自对下面论文的编译和解读:导读:随着机器在某些认知问题上超越人类,人机协作将会带来越来越显著的影响。造成人类偏见的三个主要原因(小而不完整的数据集,从自己的决策结果中学习&…

struts2的核心和工作原理

在学习struts2之前,首先我们要明确使用struts2的目的是什么?它能给我们带来什么样的优点? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的优点就不在提了。技术优势 Struts2有双方面的技术优势,一…

mysql允许root远程连接_西部数码使用指南:远程桌面之终端服务器超出了最大允许连接数解决...

版权归西部数码所有,原文链接:https://www.west.cn/faq/list.asp?unid739出现这种情况的原因和解决办法。 原因:用远程桌面链接登录到终端服务器时经常会遇到“终端服务器超出最大允许链接数”诸如此类错误导致无法正常登录终端服务器,引起该…

关于征集2020重大科学问题和工程技术难题的通知

来源:中国指挥与控制学会学会全体会员:为研判未来科技发展趋势、前瞻谋划和布局前沿科技领域与方向,瞄准世界科技前沿,推进世界科技强国建设,根据《中国科协办公厅关于征集2020重大科学问题和工程技术难题的通知》精神…

怎么在别人网站注入js脚本_别人的网站是怎么实现引流的?这些站外SEO技巧是关键...

点击上方蓝字关注我们!因为分享,我们相遇在SEO路上“网站上线一段时间了,为什么没有流量?为什么没有询盘?”对于做网络营销的企业而言,网站流量与询盘是建立网站的根本目的,可是为什么操作了一段…

比尔盖茨NEJM发文:新冠肺炎是百年一遇的流行病!全世界应该如何应对?

来源:生物谷面对任何危机,政府都有两个同等重要的责任:解决眼前的问题,并防止它再次发生。COVID-19大流行就是一个恰当的例子。我们现在需要拯救生命,同时也需要改善我们应对疫情的方式。第一点更为紧迫,但…

java实现上传图片代码_Java图片上传实现代码

本文实例为大家分享了java图片上传代码,供大家参考,具体内容如下import java.io.*;import java.net.*;/**发送端*/class picsend{public static void main(String[] args) throws Exception{if(args.length!1){System.out.println("请选择一张.jpg图…

中国数学相比与西方数学为什么会处于劣势?

来源:数学职业家虽然中国人更习惯【中国数学相比与西方数学为什么会处于劣势?】的视角,但私以为问【西欧数学为何可以独步天下】更合适。因为曾经辉煌过的阿拉伯数学、印度数学都落寞了。也没有其他任何地区的文明能达成西欧的成就。另外&…

java的地位和优势,Java语言之所以能持续占领霸主地位 这些优势功不可没

java作为一个真正面向对象语言,驰骋IT界二十余载,一直独占编程语言排行榜榜首,成为广泛使用的开发编程语言,为什么java就能够持续占领霸主地位呢?有哪些必然的优势呢?这首要的优势就是:既然是真…

WebBrowser,挖坑,跳坑,填坑

最近在 C# Asp.net 平台上的一个项目中用到了 WebBrowser 控件。自然而然就进入了 一连串的坑了。用网络上一同行的话“用WebBrowse,就是在给自己挖坑”。 道术太浅,这个坑我还是跳了。 需求:截取网页中的一部分,生成图片。 咣当咣…

你可能会错过的3个重要AI趋势

来源:雷锋网以下3个趋势,目前可能尚未引起注意,但长期来看会产生重大影响。根据Gartner的一项调查,到2020年底,全球48%的CIO将部署AI。尽管人们对AI和ML持乐观态度,但我仍然持怀疑态度。在可以预…

线性代数知识点总结_线性代数导读+笔记

一些学习线性代数的心得和资源分享,供大家参考。资源Introduction to Linear Algebra, 5th Edition​math.mit.edu学线性代数主要的参考书,Strang 教授也算是网红了,讲课讲得十分浅显易懂,网上有配套的video,强烈推荐。…

5G通信网络专题报告:新一轮移动通信网络建设迎来高潮

报告来源:山西证券1. 移动通信网络概述1.1 移动通信网络行业界定异地间人与人、人与物、物与物进行信息的传递和交换称为通信。通信以获取信息为目的,实现信息传输所需的一切设备和传输媒介构成通信系统,通信系统大体包括终端和通信网络两部分…

马赛克战——利用人工智能和自主系统来实施决策中心作战

知远战略与防务研究所 沐俭/编译自:美国战略与预算评估中心网站【知远导读】本篇推送编辑节选自美国战略与预算评估中心2020年2月11日发布的同名研究报告,报告由CSBA高级研究员布莱恩克拉克等撰写。报告认为,美军目前这种以一体化、多功能集…

java动态内存分部,如何利用Java实现动态内存分配?

一.实验原理原理:内存以分区为单位,每个分区可由(ID,addr,size,)进行描述class sector{int id -1;//记录作业的编号int addr0;//内存的起始位置int size100;//分配的内存大小}建立两个链表avail和busy。av…

postgresql两个列模糊比较_JDBC进阶(一):批处理与获取自增长列的值

一、批处理假如要插入一万条记录到数据表中,那么使用普通的方法就要执行一万次插入操作,这样会频繁打开和关闭数据库连接,导致执行速度变慢。因此可以使用批处理机制将多条语句一次性提交给数据库批量处理。批处理的相关API:void …

深度解读后疫情时代下,零售行业的趋势及技术前瞻

来源:苏宁零售技术研究院作者:王俊杰、罗海棠博士、郭永慧、池曙强、张绿漪博士新冠状病毒肺炎疫情发展严峻,短时间内席卷全国。民众在政府的号召下选择了尽量不出行,餐饮、旅游、线下零售等行业面临严峻考验。但同时,…

JAVA-配置path环境

配置path环境变量变的目的是什么? 控制台可以在任意的路径下都可以找到java的开发工具。 为了说明几个JDK环境变量的作用,这里先给出环境变量的定义 环境变量: 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比…