? ? 原型:
? ? ? ? 每个构造函数都有一个prototype属性,即 显式原型属性,它指向构造函数的原型对象
? ? ? ? 每个实例对象都有一个__proto__属性,即 隐式原型属性,它指向构造函数的原型对象
? ? ? ? 通过显式原型属性向原型对象上设置值,通过隐式原型属性向原型对象上读取值,即 实例对象的隐式原型属性值等于其构造函数的显式原型属性值
? ? 原型链:
? ? ? ? 每个构造函数的原型对象,默认是一个空的Object构造函数的实例对象,也都有一个__proto__属性
? ? ? ? 实例对象和原型对象的__proto__属性连接起来的一条链,即 原型链,它的尽头是Object构造函数的原型对象的__proto__属性
? ? ? ? 当在实例对象上读取值时,先在实例对象本身上找,当找不到,再通过__proto__属性,在其构造函数的原型对象上找,
? ? ? ? 如果还找不到,就继续沿着__proto__属性向上找,直到Object构造函数的原型对象的__proto__属性为止,此时值为null。