始终引用类的当前实例的Typescript关键字

时间:2018-09-16 19:46:58

标签: typescript this

在Typescript中可以使用“ this”或其他含义,例如C#e Java中的“ class的当前实例”吗?而不像javascript中通常的绑定上下文那样?

1 个答案:

答案 0 :(得分:0)

在TypeScript类内部,使用关键字this实际引用该类的当前实例。您可以在documentation中看到它:

class Greeter { 
    greeting: string; 
    constructor(message: string) { 
        this.greeting = message; 
    } 
    greet() { 
        return "Hello, " + this.greeting; 
    } 
} 

let greeter = new Greeter("world");

另一方面,对于静态属性,您应该使用类名称引用静态属性(这也是文档中的一个示例):

class Grid { 
    static origin = {x: 0, y: 0};
    calculateDistanceFromOrigin(point: {x: number; y: number;}) { 
        let xDist = (point.x - Grid.origin.x); 
        let yDist = (point.y - Grid.origin.y); 
        return Math.sqrt(xDist * xDist + yDist * yDist) / this.scale;
    } 
    constructor (public scale: number) { } 
}

将函数传递给事件处理程序时,可以使用将上下文设置为当前实例的箭头函数语法:

class Greeter {
    constructor(message: string) { 
        handler.addEventListener(this.greet); 
    } 
    greet = () => { 
        return "Hello, " + this.greeting; 
    } 
} 

另一种选择是对传递的函数使用JavaScript函数bind,并以this关键字作为参数,以便该函数具有实例的上下文:

class Greeter {
    constructor(message: string) { 
        handler.addEventListener(this.greet.bind(this)); 
    } 
    greet() { 
        return "Hello, " + this.greeting; 
    } 
} 

您可以阅读有关“ this” here的更多信息。