原型和原型链
原型链的形成真正是靠__proto__ 而非prototype,
当JS引擎执行对象的方法时,先查找对象本身是否存在该方法,
如果不存在,会在原型链上查找,但不会查找自身的prototype。
一个对象的__proto__记录着自己的原型链,决定了自身的数据类型,改变__proto__就等于改变对象的数据类型。
函数的prototype不属于自身的原型链,它是子类创建的核心,决定了子类的数据类型,是连接子类原型链的桥梁。
在原型对象上定义方法和属性的目的是为了被子类继承和使用。