⊗jsOpAdCL 41 of 60 menu

JavaScript OOP에서의 컨텍스트 손실

클래스를 다룰 때 컨텍스트가 손실되어 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
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부