gpt4 book ai didi

javascript - typescript :(中间值)。(...)从派生类调用父类的方法时不是函数

转载 作者:行者123 更新时间:2023-12-05 01:12:13 28 4
gpt4 key购买 nike

这是我的父类,它有 trigger 方法,即 public 方法:

class BaseEffect {
//properties and contructor...
//other methods...

public trigger = (): void => void (this.target.hitPoint -= this.amount);
}

还有一个 TurnBasedEffect 扩展了 BaseEffect 类:

class TurnBasedEffect extends BaseEffect {
//properties and contructor...
//other methods...

public trigger = (): void => {
super.trigger();
this.remainingTurns--;
};
}

这个类也有trigger方法,在这个方法里面调用了父类的一个trigger方法。

问题是当调用派生类的trigger方法时,typescript会抛出这个错误:

TypeError: (intermediate value).trigger is not a function

并指向TurnBasedEffect类的trigger方法的这一行:

//...
super.trigger();
//...

我的类(class)出了什么问题以及如何解决这个问题?

最佳答案

你有一个初始化为箭头函数的字段。初始化由构造函数完成:

class Foo {
bar = () => {};
}

console.log(new Foo().bar);
console.log(new Foo().hasOwnProperty('bar'));
console.log(Foo.prototype.bar);

该字段没有在原型(prototype)链中结束,所以它没有被继承,你不能通过super来调用它。

我建议写普通方法:

class BaseEffect {
//properties and contructor...
//other methods...

public trigger() {
this.target.hitPoint -= this.amount;
}
}

class TurnBasedEffect extends BaseEffect {
//properties and contructor...
//other methods...

public trigger() {
super.trigger();
this.remainingTurns--;
}
}

关于javascript - typescript :(中间值)。(...)从派生类调用父类的方法时不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62380211/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com