class Test {
DISPATCH_TABLE = {
"Outer Method": this.outerMethod
}
innerMethod() {
console.log("success");
}
outerMethod() {
console.log(this);
this.innerMethod();
}
dispatch(method_name) {
this.DISPATCH_TABLE[method_name]()
}
constructor() {
this.outerMethod = this.outerMethod.bind(this)
}
}
t = new Test()
t.dispatch("Outer Method")
Это регистрирует саму таблицу диспетчеризации, а затем печатает ошибку "this.innerMethod не является функцией". Я понимаю, почему этот будет привязан к таблице диспетчеризации без вызова bind () в конструкторе, но я подумал, что включение этого вызова должно было вызвать этот чтобы ссылаться на класс в любых вызовах связанного метода.
Я не виню JavaScript или bind () за мои ожидания. Я просто не знаю, почему мои ожидания неверны.
Я мог бы просто использовать оператор switch вместо таблицы диспетчеризации, но я бы предпочел использовать таблицу диспетчеризации, если смогу.