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

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

作者: 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对象。这就涉及到继承了)。

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

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

相关文章

  • 原型链

    构造函数、原型、实例的关系 通过构造函数创建实例 每个构造函数都有一个原型对象 原型对象到包含一个指向构造函数的指...

  • JS继承与原型链

    构造函数,原型和实例的关系: 每个构造函数(constructor)都有一个原型对象(prototype),原型对...

  • 原型模式

    p1 打印如下 构造函数、构造函数实例对象、构造函数原型属性 之间的关系

  • 原型链

    简单回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例...

  • 继承

    构造函数、原型和实例的关系: 每个构造函数都有其对应的原型对象;每个原型对象都有一个构造函数指针construct...

  • 继承的几种方式

    构造函数,原型和实例的关系每个构造函数都有一个原型对象prototype,原型对象中有个constructor属性...

  • 12.如何查找构造函数和原型的属性

    构造函数.prototype 查看构造函数的原型属性实例对象.ptoto 查看实例对象的构造函数的原型实例对象...

  • 继承方法

    构造函数/原型/实例的关系 借助构造函数实现继承 借助原型链实现继承(弥补构造函数实现继承不足) 组合方式(组合原...

  • 构造函数,实例,原型关系详解

    1.构造函数,实例,原型三者关系如下 构造函数的prototype指向其原型对象 原型对象的constructor...

  • javascirpt复习

    实例中访问构造函数原型的指针,指向的是构造函数原型,不是构造函数; 所以重写构造函数原型对象,【实例对象】访问还是...

网友评论

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

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