⊗jsOpAdCL 41 of 60 menu

Kehilangan Konteks dalam OOP di JavaScript

Saat bekerja dengan kelas, konteks bisa hilang dan this akan menunjuk bukan pada objek kelas, tetapi pada sesuatu yang lain. Mari kita lihat bagaimana ini bisa terjadi dan apa yang harus dilakukan.

Misalkan kita memiliki kelas User, yang berisi nama pengguna dan array kota-kota yang pernah dikunjungi pengguna ini:

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

Misalkan ada metode yang menampilkan kota-kota:

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

Misalkan dalam metode ini kita memutuskan untuk menggunakan beberapa metode pembantu kelas. Dalam hal ini, konteks akan hilang:

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

Masalah dapat diperbaiki, misalnya, dengan menggunakan fungsi panah:

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

Perbaiki kesalahan yang dilakukan dalam kode berikut:

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);
Indonesia
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan cookie untuk operasi situs, analitik, dan personalisasi. Pemrosesan data dilakukan sesuai dengan Kebijakan Privasi.
terima semua atur tolak