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
@morti92: teraz rozumiem! Wiem gdzie mój błąd, po prostu źle zapamiętałem rozróżnienie obiekt/metoda. No i się rozjaśniło, dziękuję bardzo :) Czyli kwestia 2) zamknięta.
@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ę.
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
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call