这里介绍的是ES6之前的继承方式,没有写 class 继承哦。
什么是继承
继承是指一个对象直接使用另一对象的属性和方法。
js中继承的方法有:原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生式组合继承
1. 原型链继承
(1). 原型、构造函数和实例的关系
function Person() { } Person.prototype var p = new Person();
构造函数:Person
属性:prototype => 指向原型对象
原型对象:Person.prototype
属性:constructor => 指向构造函数
原型、构造函数和实例的关系:
出现上面那个结果的原因是,实例是没有constructor这个属性的,p.constructor其实是访问的p.prototype.constructor,但是由于我们用对象字面量的方式重写了Person.prototype,所以会顺着原型链往上找,找到Object.prototype.constructor.
(2). 原型链
如(1)中所示,如果让(1)中的原型对象成为另外一个类型的实例,以此类推,便构成了原型链。
注意:所有构造函数的默认原型都是Object的实例,因此默认原型会有一个prototype指针指向Object.prototype。
(3). 原型链继承
主要思想是:通过设定一种类型的原型是另一种类型的实例来继承另外一种类型。
例如:B要继承A
创建A的实例:new A();
让其等于B的原型:B.prototype = new A(); //B则继承了A里面所有的属性和方法
原型搜索机制:以读取方式访问一个实例属性时,在该实例中搜索该属性,若没有找到再搜索实例的原型,顺着原型链往上找。
代码示例如下: