原型
我们先从内存中分析这段代码的执行过程
在内存空间中,两个一模一样的函数同时创造了两份,这样浪费了内存空间
解决问题
- 当你需要给示例对象添加方法
- 直接书写在构造函数内
- 我们的原型就是解决了这个问题
- 不好的原因
- 当我把函数方法书写在构造函数体内
- 每次创建实例的时候,都会创建一个函数数据类型
- 多个函数方法,一模一样,但是占据了多分存储空间
原型
原型
- 概念:每一个构造函数天生自带一个
prototype
属性,是一个对象数据类型 - 概念:每一个对象天生自带一个属性
__proto__
,指向所属构造函数的prototype
- 概念:当你访问对象的成员的时候,首先在自己身上查找,如果没有自动去到
__proto__
上查找
原型:
- 构造函数天生自带的一共 prototype
- 作用:有构造函数添加方法,专门给实例对象使用
如何解决问题
- 我们把需要添加给实例的方法,放在构造函数的原型(prototype)上
- 就可以有实例进行访问使用
这样我们new出来的多个实例对象一模一样的方法只占用了一个空间,注意必须与new连用
原型链
原型链
原型链
- 用__proto__ 串联起来的对象链状结构
- ==注意:==使用
__proto__
- 每一个对象数据类型,都有一个属于自己的原型链
- 作用:为了访问成员对象
对象访问机制
- 当你需要访问对象的成员的时候
- 首先在自己身上查找,如果有直接使用
- 如果没有,会自动去
__proto__
上查找 - 如果还没有,就再去
__proto__
上查找 - 知道Object.prototype上也没有,那么就返回undefined
原型链分析