使用构造函数创建多个对象时,多个对象有相同的方法、属性名和属性值,却随着创建过程中在内存中多次存储,造成浪费内存的问题, 怎样既避免内存浪费又想实现属性和方法的共享?那就要使用原型对象(prototype)了。
JavaScript 规定,每一个构造函数都有一个** prototype** 属性,指向另一个对象,所以我们也称为原型对象
原型对象中有一个属性——constructor指向构造函数
实例对象可直接访问原型对象中函数执行过程:先找实例对象属性或函数,找不到会再找原型对象中属性或函数
实例对象都会有一个属性__proto__指向构造函数的 prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象的方法,就是因为实例对象有原型__proto__的存在
构造函数、实例对象、原型对象关系如下图
prototype对象作为object数据结构,是由Object构造函数创建的实例对象,而Object构造函数也有prototype原型对象,自然的,Object的prototype原型对象也有constructor指向Object,这个关系我们称为原型链,关系如下图