原型prototype
只有构造函数有的一个属性(prototype),并且为对象类型
为了在javascript中实现继承而出现的产物
proto
所有对象都拥有的属性,指向该对象对应的原型对象
概念看完直接上图
情况一:使用构造函数创建对象

当我们创建一个Father构造函数,并且new一个对象时
function Father(){this.name = "father";}var father = new Father();
father中的__proto__指向Father.prototypeFather.prototype中也包含了__proto__属性,指向Object.prototype
当我们访问father.name时,如果自身没有属性
会顺着__proto__找向Father.prototype,依然没有,
会继续顺着Father.prototype.__proto__找向Object.prototype
直到找向Object.prototype.__proto__时,值为null。
情况二:修改原型

当我们将Son原型修改为father对象时Son.prototype = new Father()
Son.prototype = new Father();function Son(){this.name = "son";}var son = new Son();
其中son.__proto__指向Son.prototype也就是new Father()
当访问son.name时,如果没有则会顺着son.__proto__找向new Father()
依然没有则会找向Father.prototype依次向上
以上两种情况便构成了原型链
特殊情况:
Object.proto===Function.prototype
Function.proto===Function.prototype
