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 
  });
});

Relaterte artikler