js中面向对象有三大特征,我们都知道,为封装,继承,多态。今天来聊聊继承。
继承,可以说是类型与类型之间的关系 [构造函数与构造函数之间的关系]。
那么,继承的目的是什么呢,是为了把子类型中公共的代码提取到父类型,实现代码重用。
js中的两种继承,原型继承和借用构造函数继承。
- 原型继承:
function Super() {
this.color = 'red';
}
function Sub() {
}
Sub.prototype = new Super();
Sub.prototype.constructor = Super;
var sub = new Sub();
console.log(sub.color);
原型继承的缺点:无法给构造函数传参。
- 借用构造函数传参:
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
function Student(name, age, sex, score) {
Person.call(this, name, age, sex);
this.score = score;
}
var stu = new Student('zs', 18, '男', 100);
console.log(stu);
借用构造函数继承的缺点:无法重用方法。
两种继承都有缺点,怎么办呢,于是就有了组合继承。
- 组合继承:
// 结合原型继承和组合式继承
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
Person.prototype.sayHi = function () {
console.log(this.name);
}
function Student(name, age, sex, score) {
Person.call(this, name, age, sex);
this.score = score;
}
Student.prototype = new Person();
Student.prototype.constructor = Student;
var stu = new Student('zs', 18, '男', 100);
console.log(stu);
组合继承结合了原型继承和借用构造函数继承的优点,思路就是使用原型链实现对原型属
和方法的继承,又通过借用构造函数实现对实例对象属性的继承。这样,方法能够重用,每个示例对象也能够有自己的属性。是Js中最常用的继承模式。