首页 > 解决方案 > 始终引用类的当前实例的 Typescript 关键字

问题描述

可以在 Typescript 中使用“this”或其他仅表示“类的当前实例”的东西,就像在 C# e Java 中一样?而不是 javascript 中通常的绑定上下文含义?

标签: typescriptthis

解决方案


在 TypeScript 类中,使用关键字 this 实际上指的是类的当前实例。您可以在文档中看到这一点:

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; 
    } 
} 

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

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

您可以在此处阅读有关“此”的更多信息。


推荐阅读