Middle
Parla di questo in diversi contesti: nei metodi degli oggetti, nelle funzioni freccia e nelle funzioni normali.
sobes.tech AI
Risposta dell'AI
In JavaScript, il valore di this dipende dal contesto di chiamata della funzione:
- Nei metodi di un oggetto
thissi riferisce all'oggetto a cui appartiene il metodo:
const obj = {
name: 'Alice',
greet() {
console.log(this.name);
}
};
obj.greet(); // Alice
- In una funzione normale (non metodo)
thisdipende dalla modalità e dal modo in cui viene chiamata:- In modalità strict (
'use strict') —thissaràundefined. - In modalità non strict — sarà l'oggetto globale (
windownei browser).
- In modalità strict (
function foo() {
console.log(this);
}
foo(); // window o undefined in strict mode
- Nelle funzioni freccia
thisviene ereditato lexicalmente dal contesto esterno, cioè preso dall'ambito in cui la funzione è stata dichiarata, non da quello in cui viene chiamata:
const obj = {
name: 'Bob',
arrowFunc: () => {
console.log(this.name);
},
regularFunc() {
const arrow = () => {
console.log(this.name);
};
arrow();
}
};
obj.arrowFunc(); // undefined o nome dal contesto esterno
obj.regularFunc(); // Bob
Pertanto, le funzioni freccia sono utili per mantenere il contesto this della funzione esterna, mentre le funzioni normali e i metodi hanno il loro valore di this a seconda di come vengono chiamati.