原型可以解决构造函数浪费内存的问题
目的:能够利用原型对象实现方法共享
protodtype也叫原型对象
Prototype 的方法,this也指向这个常见的对象
原型就是构造函数的一个属性
- 构造函数通过原型分配的函数是所有对象共享的
- Js规定,每一个构造函数都有一个prototype属性,指向另一个对象,所以我们也称为原型对象
- 这个对象可以挂载函数,对象实例化不会多次创建航行函数,解决内存
- 我们可以把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法
- 构造函数和原型对象中的this都指向实例化的对象
公共的属性写到构造函数里面,公共的方法写到原型对象里面(prototype)
_proto_ 对象原型,只要构造函数在prototype里存储方法或属性时,创建的对象都可以通过对象上的_proto_这个属性访问到 这也就是说_proto_是对象上的属性
__proto__是包含在实例对象里面的,__proto__对象原型里面也有一个constructor属性,指向创建该实例对象的构造函数
构造函数和原型里面的this就是 实例对象
如果构造函数内和原型对象上有相同的方法时,会执行构造函数上的,原因是临近原则查找方式
Constructor属性 该属性指向该原型对象的构造函数
Constructor 本身就是构造函数(手动指回原来的构造函数)以下这种赋值来指回来
对象原型(__proto__)和原型对象(prototype)他们都有一个constructor属性,constructor属性也叫构造函数,而且它指向构造函数本身(Person)
场景:用于查找该对象引用的是哪个构造函数
原型链:
所有的对象上都有原型对象(prototype),所有的原型对象上都有对象原型(__proto__),那种查找方式就是原型链(一级一级朝上查找)
其实构造函数就是在创建对象 构造函数的终极boss是Object
如果object身上都没有想要找的方法,那就会返回null
用instanceof 去查找 一级一级往上找