我有这样的代码片段:
class Player implements OthelloPlayer {
depth;
constructor(depth: number) {
this.depth = depth;
}
getMove(state: OthelloState) {
return this.MinimaxDecision(state, this.depth);
}
}
我想调用MinimaxDecision而不使用'this'关键字。这样做的目的是避免丢失窗口或另一个对象的“this”上下文--这在从另一个类或函数调用方法时经常发生。
3条答案
按热度按时间1u4esq0p1#
您可以将
getMove
方法更改为一个属性,该属性被分配一个箭头函数以保留this
的值:注:上面的代码会有一个编译错误,因为没有定义
MinimaxDecision
。你可以按照自己的意愿来定义它。这样做可以确保
getMove
中的this
的值将成为类的示例,因为它转换为以下代码(注意this
是如何存储的,然后在getMove
中使用):如果你不想使用一个箭头函数的属性,那么不要像这样做语句…
做...
pepwfjgg2#
调用类成员时不能松开“this”。您可以在任何地方使用fat arrow functions。他们解决了所有“这个”问题。
例如:
cbeh67ev3#
一种可能的方法是使用变量的外部声明-它将工作,但仅适用于单例(您仅限于使用类的一个示例,因为外部变量将在示例之间共享)。
注意,这种解决方案不仅限于单例或静态类,而且可以被其他开发人员视为反模式和不良实践(因为它打破了封装范式)。
另一种更合适的解决方案是在方法开始时使用解构赋值:
最奇特的解决方案是找到/编写自己的TS插件,它可以做你想要的。