Wpis z mikrobloga

Przerabiam kurs #javascript od Jonasa na Udemy i nie mogę zrozumieć jednej rzeczy. Ktoś pomoże w tłumaczeniu? W jednym z zadań kod metody wygląda w ten sposób:

var john = {
fullName: 'John Smith',
bills: [124, 48, 268, 180, 42],
calcTips: function() {
this.tips = [];
this.finalValues = [];
for (var i = 0; i < this.bills.length; i++) {
// Determine percentage based on tipping rules
var percentage;
var bill = this.bills[i];

if (bill < 50) {
percentage = .2;
} else if (bill >= 50 && bill < 200) {
percentage = .15;
} else {
percentage = .1;
}

// Add results to the corresponing arrays
this.tips[i] = bill * percentage;
this.finalValues[i] = bill + bill * percentage;
}
}
}

Chodzi mi konkretnie o użycie keyword "this" w 5. i 6. linijce. Nie rozumiem dwóch rzeczy.
1) Dlaczego możemy w tym wypadku użyć "this" na niezdefiniowanych wcześniej zmiennych? Te zmienne są w ten sposób definiowane po raz pierwszy, nie pojawiają się wcześniej w kodzie. Czy:

this.tips = var john.tips = []
this.finalValues = var john.finalValues = []
?

2) Dlaczego "this" odnosi się tutaj do metody "john", a nie do funkcji "calcTips"?

Jonas mówi, żebym się nie przejmował i jechał dalej, ale ja chcę dokładnie zrozumieć kod, a nie klepać go potem na pamięć z wyuczonych patternów ( ͡° ʖ̯ ͡°)
#js
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Ojcomitam: 1. w metodzie używasz this mimo że nie ma obiektu. Po wywołaniu tej metody na obiekcie this będzie się odnosiło do obiektu na którym ją stosujesz. To wynika z tego co wcześniej pisałem. Metoda ma być uniwersalna więc słówko this określa dowolny obiekt na którym zastosujesz tę metodę. Nie pracuję na co dzień w JS więc niech się ktoś wypowie jeśli coś niedobrze napiszę.
  • Odpowiedz