如何在Javascript中从内部函数调用外部类函数?

Sah*_*hin 0 javascript oop class typescript

class Outer{
    private outFunction(){
       console.log("Okay!");
    }
    public functionWeCall(){
         function innerFunction(){
             this.outFunction();    //That doesn't work
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图将代码拆分为函数,以提高可读性。但这不起作用,如何从内部函数调用外部类函数?

Kam*_*kov 5

这是一个范围问题。当你到达functionWeCall(),this开始引用那个函数而不是类时,因此outFunction()不存在于this。典型的解决方法可能如下所示:

class Outer {
  private outFunction() {
    console.log("Okay!");
  }

  public functionWeCall() {
    let _this = this;
    
    function innerFunction() {
        _this.outFunction();
    }
  }
}

Run Code Online (Sandbox Code Playgroud)

...但我宁愿建议重新处理整个事情,这样你就没有这样的嵌套函数。

编辑:正如@Aluan Haddad 所建议的,这是同样的事情,但有一个箭头函数:

class Outer {
  private outFunction() {
    console.log("Okay!");
  }

  public functionWeCall() {
    () => {
      this.outFunction();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

...如果您希望内部函数仍然可调用,请将其分配给一个变量:

class Outer {
  private outFunction() {
    console.log("Okay!");
  }

  public functionWeCall() {
    let innerFunction = () => {
      this.outFunction();
    }
    
    innerFunction(); // this could be anywhere in the scope of functionWeCall()
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @Sahin,箭头函数“=>”被添加到 JavaScript 中,因为这是一个常见的烦恼。箭头函数没有自己的“this”,因此您可以像使用其中的任何其他变量一样使用它。 (2认同)