在typescript中访问没有“this”关键字的类型属性

时间:2015-11-09 21:04:29

标签: typescript

我有这段代码:

class Player implements OthelloPlayer {

    depth;

    constructor(depth: number) {        
        this.depth = depth;
    }

    getMove(state: OthelloState) {
        return this.MinimaxDecision(state, this.depth);
    }
}

我想在没有'this'关键字的情况下调用MinimaxDecision。目标是避免将“this”上下文丢失到窗口或其他对象 - 这在从另一个类或函数调用方法时经常发生。

2 个答案:

答案 0 :(得分:3)

您可以将getMove方法更改为分配了箭头功能的属性,以保留this的值:

class Player implements OthelloPlayer {
    constructor(public depth: number) {        
    }

    getMove = (state: OthelloState) => {
        return this.MinimaxDecision(state, this.depth);
    };
}

旁注:上面的代码会出现编译错误,因为未定义MinimaxDecision。您可以根据需要定义它。

这样做可以确保thisgetMove的值将成为类的实例,因为它会转换为此代码(请注意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