Ключевое слово Typescript, которое всегда ссылается на текущий экземпляр класса - PullRequest
0 голосов
/ 16 сентября 2018

возможно в Typescript использовать "this" или что-то еще, означающее просто "текущий экземпляр класса", как в C # e Java? А не как обычный обязательный контекст, означающий в javascript?

1 Ответ

0 голосов
/ 16 сентября 2018

Внутри класса 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; 
    } 
} 

Другой вариант - использовать JavaScript-функцию bind в переданной функции с ключевым словом this в качестве аргумента, чтобы у функции был контекст экземпляра:

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

Вы можете прочитать больше об 'этом' здесь .

...