Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 具有嵌套方法的方法引用参数的方法_Typescript - Fatal编程技术网

Typescript 具有嵌套方法的方法引用参数的方法

Typescript 具有嵌套方法的方法引用参数的方法,typescript,Typescript,我需要一个引用其他方法的方法,该方法可能嵌套了一个方法。所有方法都属于同一对象。下面的代码解释了我想做的一切: class SomeClass { functionPop(this.mainFunc); functionPop(func) { func(); } mainFunc() { console.log('This will be printed'); this.nestedFunc(); //Here is an error } ne

我需要一个引用其他方法的方法,该方法可能嵌套了一个方法。所有方法都属于同一对象。下面的代码解释了我想做的一切:

class SomeClass {

  functionPop(this.mainFunc);

  functionPop(func) {
    func();
  }
  mainFunc() {
    console.log('This will be printed');
    this.nestedFunc(); //Here is an error
  }
  nestedFunc() {
    console.log('We didnt reach this point');
  }

}
错误告诉我这是一个未定义的问题。我知道方法mainFunc中的“this”一词并不是指某个类的对象。我知道我可以通过这样的方式修复它:

class SomeClass {

  functionPop(this.mainFunc);

  functionPop(func,nestedFunction) {
    func(nestedFunction);
  }
  mainFunc(nestFunc) {
    console.log('This will be printed');
    nestedFunction();
  }
  nestedFunc() {
    console.log('Here we are successfully - this will be printed');
  }

}

我觉得这远远不是正确的解决方案,没有这些参数,有什么办法可以让它变得更好吗?

只要你传递一个函数引用,比如
functionPop(this.mainFunc)
,函数中的上下文(
)会根据调用方式发生变化。在这种情况下,在
functionPop
中调用它时没有上下文作为
func()
——因此
将是
未定义的

若要解决此问题,可以在传递函数时使用包装来包装函数——这将保留上下文:

functionPop(() => this.mainFunc());
functionPop(this.mainFunc.bind(this));
或用于设置上下文:

functionPop(() => this.mainFunc());
functionPop(this.mainFunc.bind(this));

另请参见:.

任何时候传递函数引用,如
functionPop(this.mainFunc)
,函数中的上下文(
)会根据调用方式发生变化。在这种情况下,在
functionPop
中调用它时没有上下文作为
func()
——因此
将是
未定义的

若要解决此问题,可以在传递函数时使用包装来包装函数——这将保留上下文:

functionPop(() => this.mainFunc());
functionPop(this.mainFunc.bind(this));
或用于设置上下文:

functionPop(() => this.mainFunc());
functionPop(this.mainFunc.bind(this));

另请参见:.

在Javascript中,根据调用上下文的不同,“this”可能会有所不同。在您的情况下,您正在丢失呼叫上下文,这就是出现错误的原因

有几种方法可以解决此问题:

  • 使用箭头函数。与他们通常不创造的相反 自己的上下文(ES6特性)
  • 使用“bind”绑定所需的上下文
  • 有关可能选项的示例和优缺点的更多详细信息,请查看此链接:


    在Javascript中,根据调用上下文,“this”可能不同。在您的情况下,您正在丢失呼叫上下文,这就是出现错误的原因

    有几种方法可以解决此问题:

  • 使用箭头函数。与他们通常不创造的相反 自己的上下文(ES6特性)
  • 使用“bind”绑定所需的上下文
  • 有关可能选项的示例和优缺点的更多详细信息,请查看此链接: