Kupoteza Muktadha katika OOP katika JavaScript
Wakati wa kufanya kazi na madarasa muktadha unaweza kupotea
na this itaelekeza
sio kwenye kitu cha darasa, lakini kwa kitu kingine.
Wacha tuone jinsi hii inaweza kutokea
na nini cha kufanya kuhusu hilo.
Wacha tuwe na darasa User,
ambalo lina jina la user na safu
ya miji, ambayo user huyu
amewahi kuwa:
javascriptclass User {
constructor(name, cities) {
this.name = name;
this.cities = cities;
}
}
Wacha tuwe na mbinu, inayoonyesha miji:
javascriptclass User {
constructor(name, cities) {
this.name = name;
this.cities = cities;
}
showCities() {
this.cities.forEach(function(city) {
console.log(city);
});
}
}
Wacha katika mbinu hii tumeamua kutumia baadhi ya mbinu za msaidizi za darasa. Katika kesi hii muktadha utapotea:
javascriptclass User {
constructor(name, cities) {
this.name = name;
this.cities = cities;
}
showCities() {
this.cities.forEach(function(city) {
console.log(this.#cape(city)); // muktadha umepotea
});
}
#cape(str) {
return str[0].toUpperCase() + str.slice(1);
}
}
Inawezekana kurekebisha tatizo, kwa mfano, kwa kuanzisha kitendakazi cha mshale:
javascriptclass 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);
}
}
Задание 1
Rekebisha hitilafu, iliyofanywa katika msimbo ufuatao:
javascriptclass 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);