一、含义
1、每一个函数(箭头函数除外)自带属性prototype,是默认属性,在函数创建时自动添加。称之为原型对象或者原型。因为是对象,所以可以添加属性和方法。
2、通过new函数得出来的叫实例对象。
3、每一个new出来的实例对象都天生自带一个属性, __proto__,称之为原型链对象(隐式原型)
4、关于new的作用:创建一个新对象;改变函数内的this指向,为这个新对象;执行函数内的代码,并将新对象的__proto__指向该函数的prototype;检查函数是否主动返回对象,如果没有,则返回这个新对象
5、原型链:每个对象都有__proto__,而这个对象有自己的原型prototype,会会形成一条由__prpto__串起来的链条,叫做原型链。
二、关系
1、每一个函数都有一个原型对象,原型对象上的属性和方法能被实例访问
1、new出来的实例对象的 __proto__指向这个构造函数的 prototype
2、原型对象有属性constructor ,该属性返回对象的构造函数
3、prototypr是一个对象,有继承属性
4、关于原型链规则:当访问对象中的属性和方法时,如果这个对象有,返回结果;如果这个对象没有。则去__proto__中查找,如果有,则返回这个结果
三、使用
1、原型对象是一个对象,可以向这个对象添加属性和方法,在函数内部
2、prototype可以直接添加属性和方法,例:
但是prototype身上添加的方法和属性不是为了给函数用,为了给将来被new出来的实例的隐式原型使用
四、总结
由此可以得出以下等式:
cp1.__proto__ === createPerson.prototype
cp2.__proto__ === createPerson.prototype
createPerson.prototype.constructor === createPerson
cp1.__proto__.constructor === createPerson
cp2.__proto__.constructor === createPerson
cp1 !== cp2