原型对象和对象原型以及原型链

2021-10-05  本文已影响0人  沃德麻鸭

首先我们要知道,什么是原型对象,什么又是对象原型?

1.原型就是原型对象------prototype    作用就是:共享方法。

每一个构造函数都有一个prototype属性,指向另一个对象构造函数通过原型分配的函数是所有对象所共享的。由于在构造函数中定义的方法在创建实例时,都会开辟一个新的内存从而造成内存浪费的问题,这时我们就可以把那些不变的方法直接定义在prototype对象上,这样所有的对象的实例就可以共享这些方法。

2.对象原型__proto__

对象都会有一个__proto__属性,指向构造函数的prototype原型对象,之所以我们对象可以使用原型对象的属性和方法,就是因为对象有__proto__原型的存在。

①实例.__proto__和构造函数.prototype是等价的

②方法的查找规则:首先看实例对象上是否存在这个方法,如果存在就调用实例本身的方法,如果没有就去构造函数原型对象上去查找,如果还是没有就继续向Object.prototype中查找,直到返回null (就近原则)

③__proto__对象原型的意义就在于为对象的查找机制提供一个方向,它是一个非标准属性,因此实际开发中不可以使用这个属性,它只是内部指向原型对象。


除了原型对象和对象原型之外还有一个属性:constructor构造函数

对象原型和构造函数原型对象里面都有一个属性:constructor。我们称为构造函数,因为它指回构造函数本身。

而__proto__原型的constructor也是同样指向的是构造函数,是通过 实例.__proto__ 先指向原型对象然后再 通过 constructor指向构造函数

很多情况下,我们需要手动的利用constructor这个属性指回原来的构造函数,例如,我们修改了原来的原型对象,给原型对象赋值的是一个对象,那么就必须手动的利用constructor指回原来的构造函数。在对象中写:constructor:目标构造函数。

三者的关系图示

构造函数、实例、原型对象三者之间的关系

原型链

①只要是对象有__proto__原型,指向原型对象

实例的原型对象里面的__proto__原型指向的是Object.prototype

Object.prototype里面的__proto__原型指向的是null

④由__proto__原型连接而成的'链子'就是原型链

原型链结构
上一篇下一篇

猜你喜欢

热点阅读