我正在尝试从父类baseArea
访问静态方法cars
,但它显示以下错误:
test.php:34 Uncaught TypeError: (intermediate value).baseArea is not a function
at Bike.get bikeArea [as bikeArea] (test.php:34)
at test.php:42
但是当我使用baseArea () {}
代替static baseArea() {}
我做错了什么?
class Cars {
constructor(x, y) {
this.height = x;
this.width = y;
}
static baseArea() {
return 44;
}
}
class Bike extends Cars {
constructor(flag) {
super(flag, flag);
}
get bikeArea() {
return super.baseArea();
}
}
let bike = new Bike(10);
console.log(bike.bikeArea);
答案 0 :(得分:3)
你可以选择
get bikeArea(){
return super.baseArea();
}
到
get bikeArea(){
return Cars.baseArea();
}
或者你可以简单地使用它:
class Cars {
constructor(x, y) {
this.height = x;
this.width = y;
}
baseArea() {
return 44;
}
}
class Bike extends Cars {
constructor(flag) {
super(flag, flag);
}
bikeArea() {
return super.baseArea();
}
}
let bike = new Bike(10);
console.log(bike.bikeArea());
答案 1 :(得分:2)
您可以简单地拨打Bike.baseArea()
而不是bike.bikeArea()
,因为它已扩展为包含Cars
。
你可以改变,
get bikeArea() {
return super.baseArea();
}
要,
static bikeArea() {
return super.baseArea();
}
从而允许您将其称为Bike.bikeArea()
。
答案 2 :(得分:2)
它不起作用,因为super.
引用了一个类实例。并且静态方法不会附加到实例上,而是附加到类本身。
但是,以下内容可行:
class Cars {
constructor(x, y) {
this.height = x;
this.width = y;
}
static baseArea() {
return 44;
}
}
class Bike extends Cars {
constructor(flag) {
super(flag, flag);
}
get bikeArea() {
return Bike.baseArea();
}
}
注意Bike.baseArea()
(为了便于阅读,可以这样称呼:Cars.baseArea()
)。
在您链接here的示例中,它可能是有效的,因为乒乓方法也是静态的并且使用Computer.pingpong()而不是新的Computer()调用.pingpong()整个链是静态的。也许在那种情况下它成功地解决了超级。