当前位置: 首页 > news >正文

js内置对象_JS 原型与原型链

f0d4c6882df7a472419db403b993ba2a.png

一 . 对象
在JS中,一切都可以当做对象。如下图,n1是数字,n2则为对象

var n1 = 1
var n2 = new Number(1)

二 .prototype

在 JavaScript 中,每当定义一个对象(函数也是对象)时候,对象中都会包含一些预定义的属性。其中每个函数对象都有一个prototype属性,这个属性指向函数的原型对象

三 .__proto__

JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__ 的内置属性,用于指向创建它的构造函数的原型对象。
对象 object 有一个 __proto__属性,创建它的构造函数是 Object,构造函数的原型对象是 Object.prototype

91106807283f8837c4e273f3f42cc8f3.png
《JavaScript 高级程序设计》的图 6-1

所以我们可以得到:

所有对象的 __proto__ = = = 指向其构造器的 prototype

var n2 = new Number(1)
// undefined

n2.__proto__ ===Number.prototype
// true

四.原型链

在以上文字我们已经知道了 对象.__proto__ ===函数.prototype;我们不妨往下延伸一下,因为函数.prototype哈希,所以他也是个对象,所以我们又可以得到

函数.prototype.__proto__===Object.prototype;

var n2 = new Number(1)
// undefined

n2.__proto__ ===Number.prototype
// true

Number.prototype.__proto__===Object.prototype
// true

而且,又因为函数也是个对象所以我们又可以得出

函数.__proto__===Function.prototype

Object.__proto__ === Function.prototype
// true  因为 Function 是 Object 的构造函数

当我们把函数.__proto__===Function.prototype,中的函数看成Function时,

Function.__proto__===Function.prototype

我们就可以发现Function.__proto__ 和 Function.prototype是相互引用的了。

参考链接:

最详尽的 JS 原型与原型链终极详解,没有「可能是」。(一)​www.jianshu.com

相关文章:

  • 交叉验证python代码_python机器学习,交叉验证
  • onvif摄像头软件_海康POE录像机添加POE网络摄像头
  • python给两个列表排序方法_对python实现合并两个排序链表的方法详解
  • python opencv压缩图片_OpenCV Python 缩放图片
  • mac cad石材填充图案_这些石材装饰细节处理,你做到位了吗?
  • python逻辑_python逻辑题
  • python语言求素数_用python判断一个数是否是素数的方法
  • 统计高于平均分的人数python_python3 下载 以及 练习1
  • cv::imread导致段错误_OGG启动报错:不能创建共享内存段
  • opengl场景代码_实战篇使用Native OpenGL渲染Unity场景
  • python中dtype是object是什么意思_python – Pandas:将dtype’object’转换为int
  • 人脸比对软件_开源推荐 | 可实现门禁、AI测温敏捷开发的人脸识别应用套件
  • coursera python证书_IBM数据科学证书 | 你想要的一站式新手入门课!
  • 前后端分离项目如何部署_利用dockercompsoe部署前后端分离的项目
  • python天气图形化显示_python可视化爬虫界面之天气查询
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Android单元测试 - 几个重要问题
  • Angular Elements 及其运作原理
  • canvas 五子棋游戏
  • css系列之关于字体的事
  • eclipse(luna)创建web工程
  • PAT A1120
  • PermissionScope Swift4 兼容问题
  • ubuntu 下nginx安装 并支持https协议
  • Vue--数据传输
  • vue中实现单选
  • Yii源码解读-服务定位器(Service Locator)
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 基于游标的分页接口实现
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 解析带emoji和链接的聊天系统消息
  • 前端攻城师
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 通过几道题目学习二叉搜索树
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 仓管云——企业云erp功能有哪些?
  • # include “ “ 和 # include < >两者的区别
  • ###C语言程序设计-----C语言学习(6)#
  • #laravel 通过手动安装依赖PHPExcel#
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C语言)fgets与fputs函数详解
  • (k8s中)docker netty OOM问题记录
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (转)Unity3DUnity3D在android下调试
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET HttpWebRequest、WebClient、HttpClient