对原型链、prototype和__proto__的一些理解

之前看到原型链虽然大致上会有些理解,但是还是会有些凌乱,不能很好的总结,今天深入地去做了一下了解,并做一个小总结。

1.原型链和__proto__
原型链实际上是通过__proto__这个属性去实现的,当我们调用一个方法时,如果没有,它就会向__proto__指向的位置去找,直到__proto__指向的值为null的时候还没有找到,就会返回错误,这也就是我们所说的原型链。
比如我们定义一个对象A:

let A = {}

当我们调用A.valueOf()时,在A对象里并没有这个方法,它就会去A.__proto__指向的Object.prototype里去寻找,就会找到。Object.prototype在原始的原型链中就是地位最最最高的一位,它的__proto__指向的值就是null。

2.prototype
prototype和__proto__一直是让人很容易觉得不太理解的部分,其实把他们当做完全不相干的两个部分就好理解了。当我们要实现一个构造函数时,我们就把方法放在函数的prototype中,因为当我们new出来一个子例时,子例的__proto__会指向构造函数的prototype,这样就可以所有生成的子例都可以通过原型链来使用到我们的方法。比如说我们要有函数A

function A() {}

A.prototype.show = () => { console.log(1) }

我们要让函数B来继承A

function B() {}

B.prototype = new A()
B.prototype.constructor = B  // 子例可以通过b.constructor得知自己来自哪个构造函数

let b = new B()
b.show()

先会在当前实例上寻找show方法,找不到就会通过__proto__指向的B.prototype里去寻找,因为B.prototype已经被A的一个子例替换,所以它的__proto__就指向了A的prototype,所以我们经过了两个__proto__就找到了show方法。

以上只是我个人的一些粗浅理解,有兴趣可以共同探讨。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值