⊗jsOpAdCL 41 of 60 menu

Mất ngữ cảnh trong OOP trong JavaScript

Khi làm việc với các lớp, ngữ cảnh có thể bị mất và this sẽ trỏ không phải đến đối tượng của lớp, mà đến một thứ gì đó khác. Hãy xem điều này có thể xảy ra như thế nào và cách xử lý nó.

Giả sử chúng ta có lớp User, chứa tên người dùng và một mảng các thành phố mà người dùng này đã đến:

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

Giả sử có một phương thức hiển thị các thành phố:

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

Giả sử trong phương thức này, chúng ta quyết định sử dụng một phương thức trợ giúp nào đó của lớp. Trong trường hợp này, ngữ cảnh sẽ bị mất:

class User { constructor(name, cities) { this.name = name; this.cities = cities; } showCities() { this.cities.forEach(function(city) { console.log(this.#cape(city)); // ngữ cảnh đã bị mất }); } #cape(str) { return str[0].toUpperCase() + str.slice(1); } }

Có thể sửa vấn đề, ví dụ, bằng cách sử dụng hàm mũi tên:

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

Hãy sửa lỗi đã mắc phải trong đoạn mã sau:

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);
Tiếng Việt
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ʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối