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