⊗jsOpAdCL 41 of 60 menu

Konteksto praradimas OOP JavaScripte

Dirbant su klasėmis gali būti prarandamas kontekstas ir this rodys ne į klasės objektą, o į ką nors kitą. Pažiūrėkime, kaip tai gali atsitikti ir ką daryti tokiu atveju.

Tarkime, turime klasę User, kuriame yra vartotojo vardas ir miestų, kuriaose šis vartotojas buvo, masyvas:

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

Tarkime, yra metodas, kuris atspausdina miestus:

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

Tarkime, šiame metode nusprendėme naudoti tam tikrą pagalbinį klasės metodą. Tokiu atveju kontekstas bus prarastas:

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

Problemą galima išspręsti, pavyzdžiui, panaudojant rodyklinę funkciją:

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

Ištaisykite klaidą, padarytą šiame kode:

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);
Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti