typescript - Hvilken fordel gir get-funksjoner i konteksten av Angular 4-komponenter?
Jeg er nysgjerrig på hva forskjellen mellom disse to funksjonene ville være i Angular 4:
get currentIndex(): number {
return `Current Index is ${this.index}`;
}
public currentIndex(): number {
return `Current Index is ${this.index}`;
}
Gjør de akkurat det samme? Hvis ja, når ville de gjort noe annerledes?
Svar #1
De er stort sett det samme, bortsett fra at funksjoner/metoder pleier å innebære en beregning. Så når du bare får tilgang til data (som indeksen i dette tilfellet), kan en funksjon virke merkelig eller fremstå som overdrevet.
Å bruke en getter er på en måte det beste fra to verdener. Det ser ut som enkel data-tilgang - currentIndex versus currentIndex() - samtidig som det lar deg legge til logikk senere hvis du trenger å gjøre noe som en beregning.
Teknisk sett er de forskjellige, og du kan bruke TypeScript PlayGround for å se hvordan de kompileres ned til forskjellig kode.
Svar #2
getter/setter er mer relatert til egenskaper enn metoder, så det er bedre å sammenligne getter/setter med vanlig egenskap.
og å påkalle getter/setter er det samme som en normal egenskap, å implementere kun getter betyr skrivebeskyttet egenskap og å implementere kun setter betyr skrivebilde egenskap.
getter og setter legger til et ekstra lag for å samhandle direkte med egenskapen, for eksempel
class Person {
private _age:number;
public get age() {
//... do something
retutn this._age;
}
public set age(value) {
if (value >0){
this._age = value
}
}
}
Fra eksemplet ovenfor forhindrer vi å tildele en ugyldig verdi til alder.
i Angular, hvis vi vil vise en getter i malen for alder for eksempel slik {{age}}, men hvis alder er en funksjon vil det være slik {{age()}}
Som jeg nevnte tidligere, er det bedre å tenke på getter/setter som en egenskap mer enn en metode
fra ditt eksempel
get currentIndex(): number {
return `Current Index is ${this.index}`;
}
Denne getteren ovenfor kan gi verdien fra tjenesten eller beregnet verdi fra en annen egenskap og vil se ut som en vanlig egenskap
setter, getter
