ann*_*mph 6 interface subclass typescript
我在 Typescript 中有一个存储类,它实现了Storage接口,比如MyStorage. 但是它的方法太多了,所以我想用它来代替MyStorage.getCandy- MyStorage.Candies.getCandies。结构可能看起来如何?
我假设,像
export class MyStorage implements Storage {
public constructor {} ...
Candies: {
getCandies() { ... }
}
Balls: {
...
}
}
Run Code Online (Sandbox Code Playgroud)
你应该考虑这样一个巨大的物体是否有意义。做所有事情的类通常是一个坏主意,您应该将它们分成几个类,每个类处理特定的对象类型(即一个类用于球,一个类用于糖果等)并使用这些类。如果你想共享代码,你可以把它放在一个基类中(如果它没有具体的功能,最好是一个抽象基类)。解决方案可能如下所示:
export abstract class MyStorage implements Storage {
}
export class CandiesStorage extends MyStorage {
getCandies() {}
}
export class BallsStorage extends MyStorage {
}
Run Code Online (Sandbox Code Playgroud)
话虽如此,如果由于您自己的原因这不可行,您可以像这样拆分函数,您只是操作符错误,您需要Candies使用=not with :(:是类型注释而不是类中的字段初始化来初始化字段)。这种方法的一个问题是,在对象字面量函数(例如getCandies)中,this如果您使用常规函数,将引用对象字面量。最简单的解决方案是使用箭头函数或添加额外的owner字段以允许访问包含的类实例。这是一个解决方案,它举例说明了这两个选项:
export class MyStorage implements Storage {
public constructor (){ }
Candies = {
getCandies: () => {
this.Balls // this refers to MyStorage
}
}
Balls = {
owner: this, // capture the owner object in a field
getBalls() {
this.owner.Candies // this refers to the Balls objects, but we can use owner to access the container
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6926 次 |
| 最近记录: |