原型链的终点为什么是null?

简介: 原型链的终点为什么是null?

一般来说,大家讲到原型链的时候到最后都会说:

所有的对象都是由Object构造函数所构造的,所以原型链的终点是Object.prototype.


而看过原型链完整图的应该都有印象,实际上真要讲终点的 话,其实原型链的终点是-null    !  !   !

于是我们思考下面这个问题


那这样是不是就陷入了死循环了呢 ? 但是原型链上明确的指出,Object.prototype的__proto__属性是指向null的,那是不是意味着Object.prototype这个对象不是由Object构造函数所创建的实例 ?


原来:

Object.prototype是由JavaScript引擎创建的,而不是由Object构造函数创建的。


当JavaScrip引]擎启动时,它会创建一些基础的对象和函数,其中之一就是object构造函数。与此同时,“object.prototype”对象也会被创建,并自动成为所有对象的最终原型。而object*这个构造函数的原型实际上就是Function.prototype”。这是因为在JavaScript中,函数也是对象,而~object~实际上是一个函数。

但是object.prototype"不是通过object构造函数来创建的。它是JavaScrip引]警初始化时自动创建的基础对象之一。

总结一下,当我们说所有的原型都是对象,这是对的。但不是所有的对象都是通过其构造函数的~new操作来创建的。objectprototype”就是一个例外,它是由JavaScript引擎在初始化时自动创建的 .


所以,因为Object.prototype不是由谁创建的,而是js引擎初始化自动创建的,所以他没有继承到别的属性,更没有继承Object的prototype , 他指向null.


相关文章
|
6月前
|
JavaScript 算法
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
|
6月前
|
C++
[C++/PTA] 判断一个点是否在一个圆的内部
[C++/PTA] 判断一个点是否在一个圆的内部
78 0
三角形判断
三角形判断
80 0
先创建一个Point类,然后定义Triangle类。在Triangle类中定义三个Point的实体来表示一个三角形的三个顶点
先创建一个Point类,然后定义Triangle类。在Triangle类中定义三个Point的实体来表示一个三角形的三个顶点
240 0
复杂数据的几种遍历方式(有点绕)
复杂数据的几种遍历方式(有点绕)
61 0
歪理解?原型链中的函数和对象
最近在看高程4,原型链肯定是绕不过的,本瓜之前一直认为,只要记住这句话就可以了: 一个对象的隐式原型(__proto__)等于构造这个对象的构造函数的显式原型(prototype)
lodash反向遍历对象属性
lodash反向遍历对象属性
87 0
16:三角形判断
16:三角形判断
113 0
|
JavaScript 前端开发 数据格式
JS对象数组中叶子对象和非叶子对象数组(二十五)
JS对象数组中叶子对象和非叶子对象数组(二十五)
508 0
JS对象数组中叶子对象和非叶子对象数组(二十五)