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…

关于解决织梦文档栏目删除后ID 从1开始的方法

在织梦当删除文档栏目后,再重新建立文档时,它的id就会按照刚才建立的文档的id的数值再增加一个, 比如,开始建立的文档id是1,当删除后,要重新再建立一个文档时,文档的后面的id已经不是从1开始&am…

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

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

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

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

struts2的核心和工作原理

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

python函数递归法求一个数各位数之和_python – 设计一个使用digit_sum计算数字总和的递归函数...

要获得(正整数)数字的最后一位数,您可以计算模数&#xff1a;last_digit n % 10该数字的其余部分(不包括最后一个地方)是&#xff1a;rest (n - last_digit) / 10理论上这应该足以分割数字并添加数字&#xff1a;def sum_digits(n):if n < 10:return nelse:last_digit n …

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

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

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

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

java hive配置_Hive配置项的含义详解(1)

一个hive任务&#xff0c;如何才算是优化的任务&#xff0c;hadoop job config里哪些配置能影响hive的效率。看看hive的详细配置我们可以略知一二。hive的配置&#xff1a;hive.ddl.output.format&#xff1a;hive的ddl语句的输出格式&#xff0c;默认是text&#xff0c;纯文本…

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

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

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

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

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

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

每个努力奋斗过的人,被不公正的际遇砸了满头包的时候,都有那么一瞬间的代入感。出生就是hard模式的人,早已经历了太多的劳其筋骨饿其体肤,再多的人为考验只会摧毁人对美好的向往。...

每个努力奋斗过的人&#xff0c;被不公正的际遇砸了满头包的时候&#xff0c;都有那么一瞬间的代入感。出生就是hard模式的人&#xff0c;早已经历了太多的劳其筋骨饿其体肤&#xff0c;再多的人为考验只会摧毁人对美好的向往。转载于:https://www.cnblogs.com/dj258/p/6805629…

python 利器_Python的爬虫利器之urllib

urllib包urllib是一个包含几个模块来处理请求的库&#xff1a;- urllib.request发送http请求- urllib.error处理请求过程中出现的异常- urllib.parse解析url- urllib.robotparser解析robots.txt文件一般我们爬虫只需要常用的几个&#xff0c;下面只列出比较常用的函数我们使用u…

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

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

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

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

WebBrowser,挖坑,跳坑,填坑

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

python中用户尝试输入三次_用Python实现登录接口,允许尝试三次

项目需求描述&#xff1a;要求用户输入用户名和密码&#xff0c;认证成功后显示欢迎信息&#xff0c;如果连续输错三次则锁定用户名。逻辑流程图&#xff1a;实现代码&#xff1a;#!/usr/bin/env pythonimport sysaccount_file ‘account.txt‘lock_file ‘lock.txt‘# put a…

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

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

php flush nginx,Nginx+phpfastcgi下flush输出问题

最近由于业务需要,需要使用php的flush输出缓存刷新&#xff0c;处理浏览器超时问题.最初的测试代码如下:ob_start();//打开缓冲区for ($i10; $i>0; $i--){echo $i.‘‘;ob_flush();flush();sleep(1);}ob_end_flush();//输出并关闭缓冲die();本以为这样就能1秒钟输出一个数字…