【日常记录】原型与原型链

按自己的理解,简要整理一下JS中原型链的相关知识。

1.什么是原型
在 JavaScript 中,每当定义一个对象的时候,对象中都会包含一些预定义的属性。
如现在声明一个number类的对象

var n1=new Number(1)
n1.toString()//"1"

但是我们打印有关n1的相关信息时,发现我们根本没有定义对象的toString属性。继续点开__proto__属性,找到了我们希望看见的toString属性。
原型说明
这个__proto__属性实际上是一个对象,也可以说是原型。
2.什么是原型链
继续检查打印出的信息,我们发现在n1.__proto__属性中还有一个__proto__属性,
比如这时我们需要hasOwnProperty属性,当在前一级原型中没有找到时,JS引擎会继续沿着__proto__属性搜索下去,直到找到需要的属性。实际上对于刚才声明的变量,当搜索到n1.proto.__proto__时,它的下一级__proto__属性的值为null,也说明这条原型链的结束。
原型链
而这个「搜索过程」,是沿着由 proto 组成的链子一直走的。这个链子就是原型链。

3. 声明一个对象后,js引擎做了什么

  • 声明一个哈希
  • 让__proto__属性指向正确的共有属性(原型)

4. prototype与__proto__

在上面两幅图中,存在这样的等式

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

也就是

var 对象=new 函数()
对象.__proto__===函数.prototype

后续知识待学习补充,此文章为番茄小火锅的原创文章,版权归饥人谷和本人所有,转载请注明出处,抄袭必究。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值