1.JS的原型与原型链
每一个对象实例都有自己对应的构造器, 对应的构造器都拥有一个prototype的属性, 值为一个plain object,这就是 构造器的原型,而且对象实例的proto属性也指向构造器的原型:
a.__proto__ === A.prototype
所以构造器原型上的属性方法是可以被对象实例访问到。
因为每一个构造器是prototype原型都是一个对象,理论上来说,这个原型对象也可能是另一个构造器的实例,这样就形成了一条原型的链,在原型链上的实例对象,是可以访问到上级原型对象上的属性方法, 原型链的顶层是Object
function B() {} B.prototype = {} function A() {} const b = new B() A.prototype = b const a = new A() a.__proto__ === A.prototype = b b.__proto__ === B.prototype === {} a.__proto__.__proto__ === {}