Przejdź do głównej zawartości

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

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js