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

文章探讨了JavaScript中Object.prototype的起源并非由Object构造函数创建,而是JavaScript引擎初始化时自动生成的。这解释了为什么它的__proto__指向null,且并非所有对象都直接继承自Object.prototype。
摘要由CSDN通过智能技术生成

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

所有的对象都是由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引]警初始化时自动创建的基础对象之一。
总结一下,当我们说所有的对象的原型也是对象,这是不绝对的。不是所有的对象都是通过Object构造函数的~new操作来创建的。"Object.prototype”就是一个例外,它是由JavaScript引擎在初始化时自动创建的 .

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值