JS完整版原型链剖析之最实用的原型链

上一篇介绍了最基本的原型链,并触发了一系列的疑问本篇解决原型的__proto__属性又指向谁。

1. 字面量创建对象

通过字面量创建对象 let = {}; 和通过构造函数创建的对象(实例对象)又有什么区别呢?其实通过let a = new Object(); 创建对象是一样的,字面量的形式是new 创建对象的语法糖,相同数组和函数也可通过new创建
例如:
let arr = new Array(); let fn = new Function(‘var a = 1;’)
(这里就不对参数的传递对过多的说明,在后续文章中介绍)
回到上文,字面量创建对象是通过new Object创建的,回顾上一篇,那么是否通过字面量创建也能形成原型链的三角关系呢?答案是肯定的

2. 揭露原型对象真实的面目

通过上面的分析只要是一个对象就会又原型链的三角关系,那么原型对象作为一个对象时又是通过谁 new 出出来的呢?、
在这里插入图片描述
;可以看除出构造函数的原型对象上的__proto__属性指向的是 Object原型对象上,而Object原型对象和Object分别通过prototype属性和constructor属性来相互的指向。那么按照这样的解释,Object的原型对象上也有__proto__属性哪有指向哪里呢?那么他身上还有__proto__属性,难道就这样一直指向下去吗?这引发了我们的深思。

3. 从错误中引发的深思

相信很多人每天都会遇到的这样的一类的错误,例如无法从undefiend,nulll身上读取到某某属性,而null,undefiend身上有__proto属性吗?那如果没有是不是就可以让上诉的__proto__属性一直指向下去的问题解决呢?结果是正确的。Object的原型对象上的__proto__属性指向null,从而不会一直指向下去。在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4. 图解

经过上面的一系列的分析得出下图的原型链
在这里插入图片描述

5. 深思

但是引起了我们的深思Object构造函数也是一个对象他也有__proto__属性,那么他的__proto__属性有指向哪里呢?还有上一篇的构造函数的__proto__属性指向哪里呢?
关注笨笨的熊

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值