prototype:每个函数都有一个prototype属性,这个属性指向一个对象,这个对象叫原型对象。
作用:节约内存、扩展属性和方法、可以实现类之间的继承
__proto__:每个通过构造函数new出来的实例对象都有一个__proto__属性,它指向创建自己的构造函数的原型对象,即fn.__proto__===Fn.prototype。对象可以直接访问__proto__里的属性和方法。
constructor:指向创建自己的那个构造函数,即Fn.prototype.constructor===Fn。
为什么要使用原型:使用prototype的好处是不会产生额外的内存,所有实例化后的对象都会从原型上继承这个属性或方法。当一个子类需要拥有父类的某些属性或方法,该属性或方法可以覆盖,又可以添加自己的属性和方法,这个操作不影响父类,这个时候使用prototype。
什么叫原型链:实例对象的原型__proto__指向new出该实例对象的构造函数原型prototype,再指向原始的对象原型Object.prototype,再指向null,形成原型链。