原型:
所有的函数在初始化的时候都有一个prototype的属性, 也就
是原型。
原型可以让我们预定义属性,包括方法,这些属性和方法会自
动应用到新对象实例上。
一个栗子:
function a(){}
a.prototype.b = function(){console.log('哈哈哈哈')}
原型链:
JS 的对象中有一个[[prototype]]属性, 这个属性就是对其他
对象的引用。
当我们在创建一个对象的时候:
var foo = new a();
调用new a(),其中的一个步骤就是把 foo中的[[prototype]]
(浏览器中可以使用__proto__访问)链接到a.prototype所指的对象。
假如你现在想调用foo对象的一个属性,foo.myproperty
第一步操作, 就是检查对象自身有没有这个属性,有的话就
拿来用。
假如没有的话, 那么就需要使用对象的[[prototype]]属性了。
这个属性现在指向了a.prototype;
假如还是没有找到的话, 那么继续找,
a.prototype.__proto__;
。。。。。
。。。。。
这个链的终点是什么呢?
就是Object.prototype;
所有普通的[[prototype]]链最终会指向内置的Object.prototype;