父类和子类之间方法和属性的相互访问
父类静态方法访问父类静态方法用this.staticfunctionMethod 来获取
父类非静态方法访问父类静态方法用this.constructor.staticfunctionMethod 来获取
父类非静态方法访问父类非静态方法用this.functionMethod 来获取
子类静态方法访问父类静态方法用super.staticfunctionMethod 来获取
子类非静态方法访问父类静态方法用super.constructor.staticfunctionMethod 来获取
子类非静态方法访问父类非静态方法用super.functionMethod 来获取
子类访问父类属性需要使用 super.constructor.Property
class Father{
constructor(x, y){
this.x = x;
this.y = y;
this.name = 'Father'
}
sayName(){
console.log(this.name)
}
static ping(){
return 'ping';
}
static bing(){
// 静态方法中直接使用 this.staticMethod 来访问父类的静态方法
console.log(`bing,${this.ping()}`);
}
unStatic(){
// 非静态方法中使用 this.constructor.staticMethod 来访问静态方法
console.log(this.constructor.ping());
}
}
Father.bing(); // bing,ping
new Father().unStatic();// ping
class Child extends Father{
constructor(x, y){
super(x, y);
this.name = 'Child';
}
test(){
// 子类不能直接访问父类属性,子类访问父类属性需要使用 `super.constructor.Property
console.log(super.name,super.constructor.name);
}
sayName(){
// 在子类的非静态方法中访问父类静态方法用super.constructor.staticfunctionMethod
console.log(super.constructor.ping());
// 在子类的非静态方法中访问父类非静态方法用super.functionMethod
super.sayName();
}
static bing(){
// 在子类的静态方法中访问父类静态方法用super.staticfunctionMethod
console.log(`bing,${super.ping()}`);
}
}
new Child().test(); // undefined,"Father"
new Child().sayName(); // ping, Child
Child.bing(); // bing,ping