⊗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šuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Биз сайттин иштөөсү, аналитика жана персонализация үчүн cookie файлдарын колдонобуз. Маалыматтарды иштетүү Маалыматты коргоо саясаты боюнча жүргүзүлөт.
баарын кабыл алуу ыңгайлаштыруу четке кагуу