⊗jsOpAdCL 41 of 60 menu

Kontekstin menettäminen OOP:ssa JavaScriptissä

Luokkien kanssa työskennellessä konteksti voi kadota ja this osoittaa ei luokan olioon, vaan johonkin muuhun. Katsotaan kuinka tämä voi tapahtua ja mitä sille tehdä.

Olkoon meillä luokka User, joka sisältää käyttäjän nimen ja taulukon kaupungeista, joissa tämä käyttäjä on käynyt:

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

Olkoon metodi, joka tulostaa kaupungit:

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

Olkoon tässä metodissa päätimme käyttää jotain luokan apumetodia. Tässä tapauksessa konteksti katoaa:

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

Ongelman voi korjata esimerkiksi käyttämällä nuolifunktiota:

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

Korjaa seuraavassa koodissa tehty virhe:

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);
Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää