⊗jsOpAdCL 41 of 60 menu

Perte de contexte en POO en JavaScript

Lorsque l'on travaille avec des classes, le contexte peut être perdu et this peut pointer non pas vers l'objet de la classe, mais vers autre chose. Voyons comment cela peut arriver et comment y remédier.

Supposons que nous ayons une classe User, qui contient le nom de l'utilisateur et un tableau des villes où cet utilisateur s'est rendu :

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

Supposons qu'il y ait une méthode qui affiche les villes :

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

Supposons que dans cette méthode, nous ayons décidé d'utiliser une méthode utilitaire de la classe. C'est dans ce cas que le contexte sera perdu :

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

Il est possible de corriger le problème, par exemple, en utilisant une fonction fléchée :

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

Corrigez l'erreur commise dans le code suivant :

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);
Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser