Hvordan man håndterer scope korrekt i TypeScript


Jeg har et spørgsmål om kontekst. Hvad er den rigtige måde at håndtere kontekst på i TypeScript? Hvis jeg forstår det korrekt, har jeg et problem med closures? Når jeg kalder en funktion inde i en funktion, som er i et objekt (klasse), så er det en closure, ikke?

Men skal jeg bruge self=this eller er der en bedre måde i TypeScript, tak? For jeg kan virkelig ikke lide denne løsning. Og jeg vil ikke binde hver lille ting.

Eksempel på, hvad jeg taler om:

export class SomeClass {
    private declaration;

    constructor() {}

    ngOnInit(){
        var self = this;
        some code
        var interval = setInterval(function() {
            self.someFunction();
        }, 1000);        
    }

    someFunction() {
      something
    }
}

Tak for ethvert råd

Svar #1

I dette tilfælde kan du bruge pilfunktion-syntaksen, som vil fange værdien af this for at henvise til klasseprototypen, som du ville forvente:

ngOnInit() {
    some code
    var interval = setInterval(() => {
        this.someFunction();
    }, 1000);        
}

Svar #2

Udover pilfunktionen kan du bruge bind-funktionen:

ngOnInit(){
    var interval = setInterval(function() {
        this.someFunction();
    }.bind(this), 1000);
}

eller som @IgorRaush sagde, dette er mere elegant:

ngOnInit(){
    var interval = setInterval(this.someFunction.bind(this), 1000);
}

Hvilket jeg foretrækker i nogle tilfælde.

Relaterede artikler