In questo tutorial, imparerai a conoscere questa parola chiave di JavaScript con l'aiuto di esempi.
In JavaScript, la this
parola chiave si riferisce all'oggetto in cui viene chiamata.
1. questo Inside Global Scope
Quando this
viene utilizzato da solo, si this
riferisce all'oggetto globale ( window
oggetto nei browser). Per esempio,
let a = this; console.log(a); // Window () this.name = 'Sarah'; console.log(window.name); // Sarah
Qui this.name
è lo stesso di window.name
.
2. questa funzione interna
Quando this
viene utilizzato in una funzione, si this
riferisce all'oggetto globale ( window
oggetto nei browser). Per esempio,
function greet() ( // this inside function // this refers to the global object console.log(this); ) greet(); // Window ()
3. questa funzione Inside Constructor
In JavaScript, le funzioni del costruttore vengono utilizzate per creare oggetti. Quando una funzione viene utilizzata come funzione di costruzione, si this
riferisce all'oggetto all'interno del quale viene utilizzata. Per esempio,
function Person() ( this.name = 'Jack'; console.log(this); ) let person1 = new Person(); console.log(person1.name);
Produzione
Persona (nome: "Jack") Jack
Qui, si this
riferisce all'oggetto person1. Ecco perché, person1.name
ci dà Jack.
Nota : quando this
viene utilizzato con le classi ES6, si riferisce all'oggetto all'interno del quale viene utilizzato (simile alle funzioni del costruttore).
4. questo metodo Inside Object
Quando this
viene utilizzato all'interno del metodo di un oggetto, si this
riferisce all'oggetto in cui si trova. Per esempio,
const person = ( name : 'Jack', age: 25, // this inside method // this refers to the object itself greet() ( console.log(this); console.log(this.name); ) ) person.greet();
Produzione
(nome: "Jack", età: 25 anni, saluto: ƒ) Jack
Nell'esempio sopra, si this
riferisce person
all'oggetto.
5. questa funzione interna interna
Quando si accede a this
una funzione interna (all'interno di un metodo), si this
fa riferimento all'oggetto globale. Per esempio,
const person = ( name : 'Jack', age: 25, // this inside method // this refers to the object itself greet() ( console.log(this); // (name: "Jack", age… ) console.log(this.age); // 25 // inner function function innerFunc() ( // this refers to the global object console.log(this); // Window (… ) console.log(this.age); // undefined ) innerFunc(); ) ) person.greet();
Produzione
(nome: "Jack", età: 25 anni, saluto: ƒ) 25 Finestra (…) indefinita
Qui, this
inside si innerFunc()
riferisce all'oggetto globale perché innerFunc()
è all'interno di un metodo.
Tuttavia, this.age
esterno si innerFunc()
riferisce person
all'oggetto.
6. questa funzione freccia interna
All'interno della funzione freccia, this
fa riferimento all'ambito padre. Per esempio,
const greet = () => ( console.log(this); ) greet(); // Window (… )
Le funzioni delle frecce non hanno le proprie this
. Quando si utilizza this
all'interno di una funzione freccia, this
fa riferimento al suo oggetto ambito padre. Per esempio,
const greet = ( name: 'Jack', // method sayHi () ( let hi = () => console.log(this.name); hi(); ) ) greet.sayHi(); // Jack
Qui, this.name
all'interno della hi()
funzione si fa riferimento greet
all'oggetto.
È inoltre possibile utilizzare la funzione freccia per risolvere il problema di avere undefined
quando si utilizza una funzione all'interno di un metodo (come mostrato nell'Esempio 5). Per esempio,
const person = ( name : 'Jack', age: 25, // this inside method // this refers to the object itself greet() ( console.log(this); console.log(this.age); // inner function let innerFunc = () => ( // this refers to the global object console.log(this); console.log(this.age); ) innerFunc(); ) ) person.greet();
Produzione
(nome: "Jack", età: 25, saluto: ƒ) 25 (nome: "Jack", età: 25, saluto: ƒ) 25
Qui, innerFunc()
è definito utilizzando la funzione freccia. Prende this
dal suo ambito padre. Quindi, this.age
dà 25 .
Quando la funzione freccia viene utilizzata con this
, si riferisce all'ambito esterno.
7. questa funzione interna con modalità rigorosa
Quando this
viene utilizzato in una funzione con modalità rigorosa, this
è undefined
. Per esempio,
'use strict'; this.name = 'Jack'; function greet() ( // this refers to undefined console.log(this); ) greet(); // undefined
Nota : quando si utilizza this
all'interno di una funzione con modalità rigorosa, è possibile utilizzare la funzione JavaScript call ().
Per esempio,
'use strict'; this.name = 'Jack'; function greet() ( console.log(this.name); ) greet.call(this); // Jack
Quando si passa this
con la call()
funzione, greet()
viene considerato come il metodo this
dell'oggetto (oggetto globale in questo caso).