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.
