简介
ES6中Class可以通过extends关机子实现继承,相比起ES5用修改原型链的方式来实现继承,要清晰方便很多。
class father {
}
class son extends father {
}
上面的例子中son通过extends关键字继承了father所有的属性和方法。(由于没有部署任何代码,所以这两个类是完全一样的,等于复制了一个father类到son中)
//定义父类
class father {
constructor (name) {
this.name = name;
}
sayName() {
return this.name;
}
}
//定义子类son继承于父类
class son extends father {
constructor(name, sex) {
super(name); //调用父类的constructor(name);
this.sex = sex; //给子类实例对象添加实例属性
}
sayName() {
return super.sayName() + ', ' + this.sex;
//调用了父类的sayName()方法
}
}
let man = new son('小明', '男');
son.sayName(); //"小明, 男" //调用子类的sayName()方法
上述例子中子类在constructor中先调用了super()方法,这实际上是在调用父类中的constructor方法,这是因为子类自己的this对象必须先通过父类的构造方法完成塑造,让它具备父类的实例属性和方法之后才能“改造它”,让它有自己的实例和方法。而不调用的话就得不到this对象。
super()调用会生成