prototype 原型:每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象。我们可以把那些不变的方法(共有的方法),直接定义在 prototype 对象上,这样所有对象的实例就可以共享这些方法。并且,这个对象可以挂载函数,对象实例化不会多次创建原型上函数,节约内存。
__proto__ 对象原型:对象都会有一个属性 __proto__ 指向构造函数的 prototype 原型对象,之所以我们对象可以使用构造函数 prototype,原型对象的属性和方法,就是因为对象有 __proto__ 原型的存在。(由于prototype也是个对象,所以prototype也有这个属性__proto__)