⊗jsOpAdCL 41 of 60 menu

Perdita del Contesto nella OOP in JavaScript

Quando si lavora con le classi, il contesto può perdersi e this punterà non all'oggetto della classe, ma a qualcos'altro. Vediamo come può succedere e cosa fare al riguardo.

Supponiamo di avere una classe User, che contiene il nome dell'utente e un array delle città in cui questo utente è stato:

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

Supponiamo ci sia un metodo che stampa le città:

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

Supponiamo che in questo metodo abbiamo deciso di usare qualche metodo helper della classe. In questo caso il contesto andrà perso:

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

Si può risolvere il problema, ad esempio, introducendo una funzione freccia:

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

Correggi l'errore commesso nel seguente codice:

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);
Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta