如何让这个关键字在我的TypeScript中工作

时间:2016-02-18 12:45:00

标签: typescript phaser-framework

我有一个关于Typescript的问题this

我有两个类,其中一个类想从另一个类调用一个方法:

class Calculator {
    foo: number;

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

    public write() {
        return "abc";
    }
}

要求调用方法的类:

class Game {

    calc: Calculator;

    constructor() {
        // this is working fine
        this.calc = new Calculator(1);
    }

    create() {
         for (var index = 0; index < 5; index++) {
            // here this.calc is undefined and I don't know why
        }      
    } 
}

然后在我的创建方法中,我总是this.calcundefined,我不知道为什么。

然后我这样称呼它:

window.onload = () => {
    var game = new Game();
};

create方法是通过Phaser.Game来调用的,这是一个游戏库。

3 个答案:

答案 0 :(得分:0)

它工作正常,这是我编译的一个片段,表明您的其他班级可以使用this.calc访问附加到它的计算器,然后我打印出来自Calculator.write()的值

class Calculator {
    foo: number;

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

    public write() {
        return "abc";
    }
}

class Game {

    calc: Calculator;

    constructor() {
        // this is working fine
        this.calc = new Calculator(1);
    }

    create() {
         for (var index = 0; index < 5; index++) {
            console.log(this.calc.write());  // this.calc works just fine here
        }      
    } 
}

var game = new Game();
game.create(); // this logs "abc" 5 times in the console

答案 1 :(得分:0)

如果您未完成此操作,可以使用:

var that = this.game.state.getCurrentState() as ConstructorState;
that.calc..

答案 2 :(得分:0)

this的引用可能会丢失。尝试将方法签名更改为绑定实例变量:

create = () => {
     for (var index = 0; index < 5; index++) {
        // here this.calc is undefined and I don't know why
    }      
}