美文网首页
关于原型链的一道题

关于原型链的一道题

作者: 指尖跳动 | 来源:发表于2019-05-25 22:53 被阅读0次
    Function.prototype.a = () => alert(1)
    Object.prototype.b = () => alert(2)
    function A(){}
    const a = new A()
    a.a()
    a.b()

new的过程可以拆解成以下三步:

  1. const a = {}
  2. a.__proto__ = A.prototype
  3. A.call(a)

每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己的__proto__,于是就这样 一直找下去,也就是我们平时所说的原型链的概念。

那么当我们调用 a.a 或者 a.b 时,首先 a 中没有 a 或者 b 这个属性, 于是,他就需要到他的__proto__中去找,也就是A.prototype,由于A.prototype中也没有 a 或者 b ;那就去 a.__proto__.__proto__ (A.prototype.__proto__)找,也就是Object.prototype中去找,于是就找到了b这个属性。a属性仍然没找到,继续去Object.prototype.__proto__中找,Object.prototype.__proto__ ==null,所以没找到a属性。

所以a可以拿到b方法,拿不到a方法, a.a()直接报错。


相关文章

网友评论

      本文标题:关于原型链的一道题

      本文链接:https://www.haomeiwen.com/subject/lbrttctx.html