美文网首页
原型、构造函数、实例的关系

原型、构造函数、实例的关系

作者: David三人行 | 来源:发表于2017-03-15 20:23 被阅读124次

    首先涉及到原型的概念,什么叫原型呢?每个函数在创建的时候,都会有一个prototype属性,该属性指向了一个对象,这个对象我们就叫做原型对象。
    原型有什么作用呢?它能够解决实例对象的属性、方法共享问题。
    在提到原型时,我们总会提到构造函数、实例,那么三者的关系是什么呢?

    盗图后增加了一些补充- -

    每个函数在创建时都会有一个prototype属性,该属性指向函数的原型对象。而函数的原型对象有一个constructor属性,该属性指向构造函数。至此,两者之间互有联系。
    而在利用构造函数创建对象时,我们用到了关键字new。具体可以看我其中一篇博文。它实际上做了以下操作:

    1.动态创建对象
    2.把this对象指向新创建的对象
    3.把对象的__proto__属性指向对象的prototype
    4.返回对象
    

    在创建对象时,实例对象会有一个constructor指向构造函数。除此之外,在每个实例中都有一个Symbol对象的属性[[Prototype]],它无法直接被访问,但是在Firefox、Safari和Chrome中,每个实例对象可以通过proto属性访问到实例的原型对象。至此,三者互有关联。

    那原型是如何实现实例间的属性、方法共享呢?
    在访问实例对象的方法或者属性时,首先根据标志符会在实例中寻找,当找到该标志符时,返回对应的属性或者方法。当找不到时,它会去寻找实例对象的原型中查找,如果找到,则返回值。否则,返回undefined(实际上还会沿着原型的原型查找,直至Object对象。这就涉及到继承了)。

    当为对象添加属性时,我们再去访问这个属性。就会在实例对象中找到该属性值,从而不会到原型对象中查找。

    然而在删除属性值时,只会删除实例对象的相应属性,而不会在找不到属性的情况下,删除了原型对象的同名属性。

    相关文章

      网友评论

          本文标题:原型、构造函数、实例的关系

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