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

这个类似说明,属性是被一并继承的。