⊗jsOpAdCL 41 of 60 menu

Verlust des Kontexts in OOP in JavaScript

Bei der Arbeit mit Klassen kann der Kontext verloren gehen und this zeigt nicht auf das Klassenobjekt, sondern auf etwas anderes. Lassen Sie uns sehen, wie das passieren kann und was man dagegen tun kann.

Angenommen, wir haben eine Klasse User, die den Namen des Benutzers und ein Array der Städte enthält, in denen sich dieser Benutzer aufgehalten hat:

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

Angenommen, es gibt eine Methode, die die Städte ausgibt:

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

Angenommen, wir haben in dieser Methode beschlossen, eine bestimmte Hilfsmethode der Klasse zu verwenden. In diesem Fall geht der Kontext verloren:

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

Das Problem kann beispielsweise behoben werden, indem man eine Pfeilfunktion verwendet:

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

Korrigieren Sie den Fehler, der im folgenden Code gemacht wurde:

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);
Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen