我正在尝试创建一个包装REST api的typescript类,并且我想将各种方法组织到子对象中,以更好地表达代码。这样做有什么办法,并且仍然通过方法中的“ this”保持对类实例的访问?
例如考虑以下类别:
class ApiService {
constructor() {....}
getMedia() {}
uploadMedia() {}
sendMassage() {}
recieveMessage() {}
}
我想组织上述方法,以便能够这样称呼他们:
const service = new ApiService();
//to call getMedia()
service.media.get();
//to call sendMessage()
service.messages.send();
// and so on
答案 0 :(得分:0)
我认为要完全满足您的要求,应使用arrow functions,以使apiService.media
和apiService.message
对象没有自己的{{1} }上下文阻碍。例如:
this
请注意,这意味着class ApiService {
constructor(public name: string) { }
private getMedia() {
console.log(this.name+" getMedia");
}
private uploadMedia() {
console.log(this.name+" uploadMedia");
}
private sendMassage() {
console.log(this.name+" sendMessage");
}
private recieveMessage() {
console.log(this.name+" receiveMessage");
}
// instance methods
public media = {
get: () => this.getMedia(),
upload: () => this.uploadMedia()
}
// instance methods
public message = {
send: () => this.sendMassage(),
receive: () => this.recieveMessage()
}
}
的每个实例将具有其函数值属性ApiService
等的自己的副本。它们不会像常规方法那样位于message.send
上。除非您生成ApiService.prototype
的许多实例,否则无关紧要。
让我们确保它可以正常工作并正确绑定:
ApiService
看起来不错。希望能有所帮助;祝你好运!