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”绑定所需的上下文
有关可能选项的示例和优缺点的更多详细信息,请查看此链接: