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())
发表回复