我有这段代码:
class Player implements OthelloPlayer {
depth;
constructor(depth: number) {
this.depth = depth;
}
getMove(state: OthelloState) {
return this.MinimaxDecision(state, this.depth);
}
}
我想在没有'this'关键字的情况下调用MinimaxDecision。目标是避免将“this”上下文丢失到窗口或其他对象 - 这在从另一个类或函数调用方法时经常发生。
答案 0 :(得分:3)
您可以将getMove
方法更改为分配了箭头功能的属性,以保留this
的值:
class Player implements OthelloPlayer {
constructor(public depth: number) {
}
getMove = (state: OthelloState) => {
return this.MinimaxDecision(state, this.depth);
};
}
旁注:上面的代码会出现编译错误,因为未定义MinimaxDecision
。您可以根据需要定义它。
这样做可以确保this
内getMove
的值将成为类的实例,因为它会转换为此代码(请注意this
如何存储然后在{{1}中使用}}):
getMove
如果你不想使用具有箭头功能的属性,那么就不要做这样的陈述......
var Player = (function () {
function Player(depth) {
var _this = this;
this.depth = depth;
this.getMove = function (state) {
return _this.MinimaxDecision(state, _this.depth);
};
}
return Player;
})();
... ...做
let player = new Player(10);
someObject.onClick = player.getMove;
答案 1 :(得分:1)
你不能放弃这个'用于呼叫班级成员。您可以做的是在任何地方使用fat arrow functions。他们解决了所有这个问题。的问题。
例如:
### Config ###
red="\033[91m"
green="\033[92m"
yellow="\033[93m"
blue="\033[94m"
viol="\033[95m"
cyan="\033[96m"
none="\033[0m"
printf "$viol%40s$none" "$testMessage..."
# execute test here
/path/test > output 2>&1
ret=$?
if [ $ret -eq 0 ]; then
printf "$green%10s$none\n" "[PASS]"
else
printf "$red%10s$none\n" "[FAILED]"
fi