继承: 首先继承是一种关系,类(class)与类之间的关系,JS中没有类,但是可以通过构造函数模拟类,然后通过原型来实现继承。继承也是为了数据共享,JS中的继承也是为了实现数据共享。下面介绍三种继承方法。
通过改变原型指向实现继承
这是一个Person构造函数,用于构造Person类的对象:
1 | function Person(name,age,sex) { |
这是一个Student构造函数,用于构造Student类的对象:
1 | function Student(name,age,sex,score) { |
可以看见,Student构造函数的很多属性和Person构造函数的属性是一致的,这样就造成了一种冗余。因此,可以让Student继承Person来减少冗余:
1 | function Student(score) { |
借用构造函数来实现继承
为了数据共享,改变原型指向,做到了继承—通过改变原型指向实现的继承,但是这种方法有个缺陷:因为改变原型指向的同时实现继承,直接初始化了属性,继承过来的属性的值都是一样的了,所以。这就是问题,只能重新调用对象的属性进行重新赋值,显然这样太麻烦了。
解决方案:继承的时候,不用改变原型的指向,直接调用父级的构造函数的方式来为属性赋值就可以了:
1 | function Person(name, age, sex, weight) { |
事实上,这个方法却带来了另一个缺陷:父级类别中的方法不能继承!!!
组合继承
原型实现继承
借用构造函数实现继承
组合继承:原型继承+借用构造函数继承
组合继承的方法是比较好的一种方式,避免了上述两种方式的缺陷。
1 | function Person(name,age,sex) { |
拷贝继承
拷贝继承:把一个对象中的属性或者方法直接复制到另一个对象中
1 | function Person() { |
(完)