Trí*_*han 2 javascript class super typescript
这是我的父类,它具有trigger
方法,即public
方法:
class BaseEffect {
//properties and contructor...
//other methods...
public trigger = (): void => void (this.target.hitPoint -= this.amount);
}
Run Code Online (Sandbox Code Playgroud)
和一个TurnBasedEffect
扩展BaseEffect
类:
class TurnBasedEffect extends BaseEffect {
//properties and contructor...
//other methods...
public trigger = (): void => {
super.trigger();
this.remainingTurns--;
};
}
Run Code Online (Sandbox Code Playgroud)
这个类也有trigger
方法,在这个方法里面,trigger
调用了父类的一个方法。
问题是当trigger
调用派生类的方法时,打字稿会抛出此错误:
TypeError: (intermediate value).trigger is not a function
Run Code Online (Sandbox Code Playgroud)
并指向该类trigger
方法的这一行TurnBasedEffect
:
//...
super.trigger();
//...
Run Code Online (Sandbox Code Playgroud)
我的课程有什么问题以及如何解决这个问题?
您有一个初始化为箭头函数的字段。初始化由构造函数完成:
class Foo {
bar = () => {};
}
console.log(new Foo().bar);
console.log(new Foo().hasOwnProperty('bar'));
console.log(Foo.prototype.bar);
Run Code Online (Sandbox Code Playgroud)
该字段不会在原型链中结束,因此它不会被继承,并且您不能通过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--;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
553 次 |
最近记录: |