简单说一下继承
- 继承是面向对象开发思想的特性之一。
- 面向对象的三大特点:封装、继承、多态
- 继承主要分ES5和ES6的继承方式
ES5的继承(主要通过函数实现类)
- 原型链继承 主要实现代码
//创建一个父类
function Parent() {
this.name='jack'
}
Parent.prototype.getName=function() {
return this.name;
}
//创建一个子类
function Child() {
}
//子类的原型等于父类的实例化对象
Child.prototype=new Parent();
var c1=new Child()
缺点: 不能传参
没有解决对象的引用问题
- 借用构造函数继承
//创建一个父类
function Parent(name) {
this.name=name ||'jack'
this.colors=['red','green','blue']
}
Parent.prototype.getName=function() {
return this.name;
}
//创建一个子类
function Child(name) {
//借用父类来承继实例属性,但不能继承父类方法
Person.call(this,name)
}
缺点: 不能继承父类方法
- 组合继承 = 原型链继承 + 借用构造函数继承
//创建一个父类
function Parent(name) {
this.name=name ||'jack'
this.colors=['red','green','blue']
}
Parent.prototype.getName=function() {
return this.name;
}
var p1=new Parent();
p1.getName();
//创建一个子类
function Child(name) {
Parent.call(this,name)
}
Child.prototype=new Parent();
var c1=new Child()
c1.getName()
优点:即能继承父类的原型方法,也能传递参数属性
ES6继承(通过class、extends、super实现)
//创建一个父类
class Parent {
constructor(name) {
this.name=name ||'jack'
this.colors=['red','green','blue']
}
getName() {
return this.name;
}
}
//创建一个子类
class Child extends Parent {
constructor(name) {
super(name) //super就是父类Parent
}
getValue() {
}
}