⊗jsOpAdCL 41 of 60 menu

Verlies van context in OOP in JavaScript

Bij het werken met klassen kan de context verloren gaan en zal this niet wijzen naar het object van de klasse, maar naar iets anders. Laten we kijken hoe dit kan gebeuren en wat we eraan kunnen doen.

Stel dat we een klasse User hebben, die de naam van de gebruiker en een array van steden bevat waar deze gebruiker is geweest:

class User { constructor(name, cities) { this.name = name; this.cities = cities; } }

Stel dat er een methode is die de steden weergeeft:

class User { constructor(name, cities) { this.name = name; this.cities = cities; } showCities() { this.cities.forEach(function(city) { console.log(city); }); } }

Stel dat we in deze methode besloten hebben een bepaalde hulpmethode van de klasse te gebruiken. In dit geval zal de context verloren gaan:

class User { constructor(name, cities) { this.name = name; this.cities = cities; } showCities() { this.cities.forEach(function(city) { console.log(this.#cape(city)); // context verloren }); } #cape(str) { return str[0].toUpperCase() + str.slice(1); } }

Het probleem kan worden opgelost, bijvoorbeeld door een pijlfunctie te introduceren:

class User { constructor(name, cities) { this.name = name; this.cities = cities; } showCities() { this.cities.forEach(city => { console.log(this.#cape(city)); }); } #cape(str) { return str[0].toUpperCase() + str.slice(1); } }

Repareer de fout die gemaakt is in de volgende code:

class Employee { constructor(name, salary, coeffs) { this.name = name; this.salary = salary; this.coeffs = coeffs; } getTotal() { return this.coeffs.reduce(function(res, coeff) { return res + this.salary * coeff; }, 0); } } let employee = new Employee('john', 1000, [1.1, 1.2, 1.3]); let total = employee.getTotal(); console.log(total);
Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren