美文网首页
原型与原型链

原型与原型链

作者: RookieD | 来源:发表于2018-08-18 20:39 被阅读0次

    原型

    • 每一个构造函数都拥有一个prototype属性,这个属性指向一个对象,也就是原型对象。当使用这个构造函数创建实例的时候,prototype属性指向的原型对象就成为实例的原型对象。
    • 原型对象默认拥有一个constructor属性,指向指向它的那个构造函数(也就是说构造函数和原型对象是互相指向的关系)。
    • 每个对象都拥有一个隐藏的属性[[prototype]],指向它的原型对象,这个属性可以通过
      Object.getPrototypeOf(obj)obj.__proto__来访问。
    • 实际上,构造函数的prototype属性与它创建的实例对象的[[prototype]]属性指向的是同一个对象,即对象.__proto__ === 函数.prototype
    • 如上文所述,原型对象就是用来存放实例中共有的那部分属性。
    • 在JavaScript中,所有的对象都是由它的原型对象继承而来,反之,所有的对象都可以作为原型对象存在。
    • 访问对象的属性时,JavaScript会首先在对象自身的属性内查找,若没有找到,则会跳转到该对象的原型对象中查找。

    原型链与继承

    上文提到,JavaScript中所有的对象都是由它的原型对象继承而来。而原型对象自身也是一个对象,它也有自己的原型对象,这样层层上溯,就形成了一个类似链表的结构,这就是原型链(prototype chain)。
    所有原型链的终点都是Object函数的prototype属性,因为在JavaScript中的对象都默认由Object()构造。Object.prototype指向的原型对象同样拥有原型,不过它的原型是null,而null则没有原型。

    相关文章

      网友评论

          本文标题:原型与原型链

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