原型和原型链
原型
每个函数都有一个属性prototype,该属性的值是一个对象,该对象即是原型对象。且在这个对象中存在一个constructor属性,该属性指向构造函数。
原型链
每个对象中都有一个__proto__属性,其指向创建这个对象的构造函数的prototype属性。当对象访问某个属性或者方法时,会首先在对象内部进行查找是否有此属性,若有,则使用此属性;若没有,则沿着__proto__继续查找,即查找创建这个对象的构造函数的原型对象身上是否有这个属性,若有,则使用;若没有,则查找原型对象的原型对象身上......
即:
var obj = {};
obj.__proto__ == Object.prototype; //返回值为true
原型链与原型的关系图如下所示: