为什么JavaScript';s bind()不是我所期望的那样在这里工作吗?

为什么JavaScript';s bind()不是我所期望的那样在这里工作吗?,javascript,this,bind,Javascript,This,Bind,这会记录分派表本身,然后打印错误,“This.innerMethod不是函数”。我理解为什么在构造函数中没有bind()调用的情况下,它会被绑定到dispatch表,但我认为包含该调用应该强制它在对绑定方法的任何调用中引用该类 我并不是因为我的期望而责怪JavaScript或bind()。我只是不知道为什么我的期望是错误的 我可以使用switch语句而不是dispatch表,但如果可以的话,我更愿意使用dispatch表。使用箭头函数可能会更好,因为箭头函数总是正确地绑定在这个范围内 我冒昧地更

这会记录分派表本身,然后打印错误,“This.innerMethod不是函数”。我理解为什么在构造函数中没有bind()调用的情况下,它会被绑定到dispatch表,但我认为包含该调用应该强制它在对绑定方法的任何调用中引用该类

我并不是因为我的期望而责怪JavaScript或bind()。我只是不知道为什么我的期望是错误的


我可以使用switch语句而不是dispatch表,但如果可以的话,我更愿意使用dispatch表。

使用箭头函数可能会更好,因为箭头函数总是正确地绑定在这个范围内

我冒昧地更改了分派表,将函数的“详细名称”映射到内部方法名称

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")

您可能会更好地使用箭头函数,这些函数总是正确的

我冒昧地更改了分派表,将函数的“详细名称”映射到内部方法名称

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")

在绑定发生之前定义
DISPATCH\u TABLE
。这不是问题。在绑定发生之前定义
DISPATCH\u TABLE
。这不是问题。