Bug #008
🪲 Znajdź buga
function Car(color) {
this.color = color
this.mileage = 0
}
Car.prototype.drive = (distance) => {
this.mileage += distance
}
const myCar = new Car("red")
myCar.drive(1000)
console.log(myCar)
Chcemy stworzyć obiekt samochodu, który będzie zwiększał swój przebieg (mileage) podczas jazdy, o wartość przekazaną w argumencie metody drive().
Jaki przebieg zostanie zalogowany do konsoli dla obiektu myCar?
🧪 Rozwiązanie
function Car(color) {
this.color = color
this.mileage = 0
}
Car.prototype.drive = function (distance) {
this.mileage += distance
}
const myCar = new Car("red")
myCar.drive(1000)
console.log(myCar)
W przykładzie z błędem, wartość mileage obiektu myCar wyniesie 0.
Niedziałanie zwiększania wartości przez this.mileage += distance wynika z tego, że funkcje strzałkowe nie mają własnego this i nie powinny być używane jako metody obiektów.
this.milage nie odnosi się więc do obiektu, tak jakbyśmy tego chcieli.
Aby naprawić ten problem, musimy zamienić funkcję strzałkową drive na zwykłą funkcję.
Po tej zmianie, obiekt myCar zwróci już wartość mileage równą 1000.
🎢 Plac zabaw
Otwórz edytor w nowym oknie📑 Linki
- Function - MDN Web Docs Glossary: Definitions of Web-related terms | MDN
- Method - MDN Web Docs Glossary: Definitions of Web-related terms | MDN
- Arrow function expressions - JavaScript | MDN
- this - JavaScript | MDN
❤️ Podobają Ci się bugi JS?
Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js