Я думаю, чтобы достичь того, о чем вы просите, в точности так, как указано, вы должны использовать функции стрелок , чтобы объекты apiService.media
и apiService.message
не имели собственного контекста 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
.
Давайте убедимся, что он работает и правильно привязан:
const api1 = new ApiService("One");
const api2 = new ApiService("Two");
api1.message.receive(); // One recieveMessage
api2.message.receive(); // Two receiveMessage
api1.media.get(); // One getMedia
api2.media.get(); // Two getMedia
Хорошо выглядит. Надеюсь, это поможет; удачи!
Ссылка на код