Nella maggior parte dei linguaggi di programmazione orientati agli oggetti, la parola chiave 'this' ha un significato particolare. Di solito si riferisce all'oggetto che è il contesto di esecuzione (cioè all'istanza corrente dell'oggetto). Ad esempio, si usa quando si fa riferimento a una proprietà dell'oggetto dall'interno: si digita this.propertyName, quindi il contesto è l'oggetto e this si riferisce ad esso.
'questo'in JavaScript
In JavaScript è più complicato perché dove questo dipende non solo da come viene definita la funzione, ma anche dalla forma in cui viene chiamata.
Guardate come questo funziona a seconda del luogo e della forma di invocazione.
Contesto globale
Utilizzato in un contesto globale legato all'oggetto globale, come finestra in un browser web.
questo; // finestra
Metodo interno all'oggetto
Utilizzato all'interno di un metodo oggetto legato all'oggetto più vicino. L'oggetto è il nuovo contesto del metodo questo parola chiave. Si noti che non si deve modificare funzione () alla sintassi ES6 fun: () => this.context perché cambierebbe il contesto.
Utilizzato all'interno di una funzione che non ha un contesto (non ha un oggetto come genitore) legato al contesto globale, anche se la funzione è definita all'interno dell'oggetto.
Si noti che si utilizza var contesto invece di contesto let/const perché lasciare che e costitutivo modificare il contesto della variabile racchiusa. var è sempre il più vicino al contesto di esecuzione globale. lasciare che e costitutivo dichiarare le variabili solo in un ambito di blocco locale.
chiamare() e applicare() sono JavaScript funzioni. Con queste, un oggetto può utilizzare metodi appartenenti a un altro oggetto. chiamare() prende argomenti separatamente dove applicare() li prende come array.
questo è qui legato al nuovo contesto modificato in chiamare() e applicare() metodi.
Utilizzato in qualsiasi gestore di eventi (ad esempio, addeventListener, onclick, attachEvent), è legato all'elemento DOM a cui l'evento era collegato.
document.querySelector(".foo").addEventListener("click", function() {
this; // si riferisce all'elemento div `foo
});
Funzione freccia ES6
Utilizzato all'interno della funzione freccia, è sempre legato al suo ambito lessicale. Nella funzione freccia, non è possibile riassegnare l'elemento questo in qualsiasi modo.