es6的类和类的继承实现的还是很体贴的,和其他面向对象语言的类的概念和思想是一致的。
class a {
constructor(name) {
this.name = name;
}
me(){
return this.name;
}
}
class b extends a{
}
let B = new b("aaa");
console.log(B.me());
//输出aaa
这个例子说明构造函数和方法是一并继承的,无特殊情况子类无需重写构造函数。
再看:
class a {
constructor(name) {
this.name = name;
}
me(){
return this.name;
}
}
class b extends a{
me(){
return "bbb";
}
}
let B = new b("aaa");
console.log(B.me());
//输出bbb
这个例子说明子类同名方法是重写父类的方法的。
再看:
class a {
constructor(name) {
this.name = name;
}
me(){
return this.name;
}
}
class b extends a{
constructor(name) {
this.name = name;
}
}
let B = new b("bbb");
console.log(B.me());
//报错!!!
执行报错!这个例子说明,子类如果重写构造函数,必须调用super方法才行。
改造一下:
class a {
constructor(name) {
this.name = name;
}
me(){
return this.name;
}
}
class b extends a{
constructor(name) {
super(name);
}
}
let B = new b("bbb");
console.log(B.me());
//输出bbb
再看:
class a {
constructor(name) {
this.name = name;
}
}
class b extends a{
me(){
return this.name;
}
}
let B = new b("bbb");
console.log(B.me());
//输出bbb
这个类似说明,属性是被一并继承的。