每个JS对象一定对应一个原型对象,并从原型对象继承属性和方法。对象__proto__属性的值就是它所对应的原型对象。
不像每个对象都有__proto__属性来标识自己所继承的原型,只有函数才有prototype属性。当你创建函数时,JS会为这个函数自动添加prototype属性,值是一个有 constructor 属性的对象,不是空对象。而一旦你把这个函数当作构造函数(constructor)调用(即通过new关键字调用),那么JS就会帮你创建该构造函数的实例,实例继承构造函数prototype的所有属性和方法(实例通过设置自己的__proto__指向构造函数的prototype来实现这种继承)。