⊗jsOpAdCL 41 of 60 menu

Губење на контекст во ООП во JavaScript

При работа со класи може да се изгуби контекст и this ќе покажува не на објектот од класата, туку на нешто друго. Ајде да погледнеме како тоа може да се случи и што да правиме за тоа.

Нека имаме класа User, која содржи име на корисникот и низа од градови во кои овој корисник бил:

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

Нека има метод кој ги прикажува градовите:

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

Нека во овој метод решиме да користиме некој помошен метод на класата. Во овој случај контекстот ќе се изгуби:

class User { constructor(name, cities) { this.name = name; this.cities = cities; } showCities() { this.cities.forEach(function(city) { console.log(this.#cape(city)); // контекстот се изгуби }); } #cape(str) { return str[0].toUpperCase() + str.slice(1); } }

Можно е да се поправи проблемот, на пример, со воведување на стрелкова функција:

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

Исправете ја грешката, направена во следниот код:

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);
Македонски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј