我正在尝试从父类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);
它不起作用,因为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()整个链是静态的。也许在那种情况下它成功解决了超级。
你可以改变你的
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());
您可以简单地调用Bike.baseArea()
而不是bike.bikeArea()
,因为它已经扩展到包括Cars
。
你可以改变,
get bikeArea() {
return super.baseArea();
}
至,
static bikeArea() {
return super.baseArea();
}
从而允许你称之为Bike.bikeArea()
。