原型对象prototype和原型链

145 阅读1分钟

使用构造函数创建多个对象时,多个对象有相同的方法、属性名和属性值,却随着创建过程中在内存中多次存储,造成浪费内存的问题, 怎样既避免内存浪费又想实现属性和方法的共享?那就要使用原型对象(prototype)了。

JavaScript 规定,每一个构造函数都有一个** prototype** 属性,指向另一个对象,所以我们也称为原型对象

原型对象中有一个属性——constructor指向构造函数

实例对象可直接访问原型对象中函数执行过程:先找实例对象属性或函数,找不到会再找原型对象中属性或函数

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

构造函数、实例对象、原型对象关系如下图

image.png

prototype对象作为object数据结构,是由Object构造函数创建的实例对象,而Object构造函数也有prototype原型对象,自然的,Object的prototype原型对象也有constructor指向Object,这个关系我们称为原型链,关系如下图

image.png