javascript - TypeError: "dette er udefinert" når du bruker forEach på medlemsarray
Jeg har en klasse marketData:
export class marketData {
id: number;
denomCount: number;
itemCount: number;
conversionRates: Array<number> = [];
conversionRateToLowest: Array<number> = [];
itemPrices: Array<Array<number>> = [];
}
Jeg vil definere en medlemsfunksjon for den, validate(), som sjekker at verdiene i klassen er satt riktig. Jeg skrev en del av denne metoden for å sjekke itemPrices:
this.itemPrices.forEach(function(this, prices){
if(prices.length != this.itemCount){
// handle error
});
Imidlertid gir det ovennevnte meg en ERROR TypeError: "this is undefined". Jeg fikk nøyaktig den samme feilen da jeg prøvde å sjekke itemPrices på denne måten:
this.itemPrices.forEach(function(prices){
if(prices.length != this.itemCount){
// handle error
});
dvs. uten this i function-parametrene.
Hva er den riktige måten å få tilgang til itemCount-medlemsvariabelen på?
Svar #1
Det er på grunn av måten du bruker forEach på. Bruk pilfunksjoner i stedet, som vist nedenfor. Og det anbefales at når du bruker TypeScript-klasser, bruk alltid pilfunksjoner, ellers vil du stadig støte på dette problemet.
this.itemPrices.forEach((prices) =>{
if(prices.length != this.itemCount){
// handle error
}
});
Svar #2
Du kan bruke ES6s pilfunksjoner for å få tilgang til this. Uansett, les dette for å forstå konteksten til this når det gjelder JavaScript og bruk av dem innen OOP i JS.
this.itemPrices.forEach((prices: number) => {
if (prices.length != this.itemCount){
// handle error
});
});
