Js 里的继承个别就是原型链继承。即实现 A 实例的原型为 B 的原型,则 A 继承 B。
首先须要理解下实例,构造函数,原型对象之间是怎么的关系。实例为从构造函数 new 失去的新对象,它有__proto__能够指向原型对象,通过 instanceof 办法能够判断实例的构造函数类型;构造函数的 prototype 指向原型对象,原型对象有 constructor 指向构造函数。
function A() {}
function B() {}
B.prototype.say = function(){console.log('say')}
// 筹备一个两头变量
function C(){}
// 从新设置 C 的原型为 B 的原型
C.prototype = B.prototype
// 创立一个实例 c,此时 c 的原型是 B 的原型
var c = new C()
// 设置实例 c 的构造函数指向 A,c.constructor = A
// 上述步骤后 A 新的原型对象 c 创立实现,它的原型指向 B,构造函数指向 A
A.prototype = c
// 此时原型链为 new A()._proto__ (c) => B.prototype => Object.prototype => null
console.log(new A(), new B())