⊗jsOpAdCL 41 of 60 menu

A kontextus elvesztése az OOP-ben JavaScriptben

Osztályokkal dolgozva előfordulhat, hogy a kontextus elveszik, és a this nem az osztály objektumára fog mutatni, hanem valami másra. Nézzük meg, hogyan történhet ez meg, és mit tehetünk ellene.

Tegyük fel, hogy van egy User osztályunk, amely tartalmazza a felhasználó nevét és azon városok tömbjét, ahol ez a felhasználó járt:

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

Tegyük fel, hogy van egy metódus, amely kiírja a városokat:

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

Tegyük fel, hogy ebben a metódusban úgy döntöttünk, hogy az osztály valamilyen segédmetódusát használjuk. Ebben az esetben a kontextus elveszik:

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

A probléma megoldható például egy nyílfunkció bevezetésével:

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

Javítsa ki a következő kódban elkövetett hibát:

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);
Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás