Neste tutorial, você aprenderá sobre essa palavra-chave do JavaScript com a ajuda de exemplos.
Em JavaScript, this
palavra-chave se refere ao objeto onde é chamada.
1. este escopo global interno
Quando this
usado sozinho, this
refere-se ao objeto global ( window
objeto em navegadores). Por exemplo,
let a = this; console.log(a); // Window () this.name = 'Sarah'; console.log(window.name); // Sarah
Aqui, this.name
é o mesmo que window.name
.
2. esta função interna
Quando this
é usado em uma função, this
refere-se ao objeto global ( window
objeto em navegadores). Por exemplo,
function greet() ( // this inside function // this refers to the global object console.log(this); ) greet(); // Window ()
3. esta função interna do construtor
Em JavaScript, as funções construtoras são usadas para criar objetos. Quando uma função é usada como função construtora, this
refere-se ao objeto dentro do qual é usada. Por exemplo,
function Person() ( this.name = 'Jack'; console.log(this); ) let person1 = new Person(); console.log(person1.name);
Resultado
Pessoa (nome: "Jack") Jack
Aqui, this
refere-se ao objeto person1. É por isso que person1.name
nos dá Jack.
Nota : Quando this
é usado com classes ES6, refere-se ao objeto dentro do qual é usado (semelhante às funções do construtor).
4. este método do objeto interno
Quando this
é usado dentro do método de um objeto, this
refere-se ao objeto no qual se encontra. Por exemplo,
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();
Resultado
(nome: "Jack", idade: 25, cumprimenta: ƒ) Jack
No exemplo acima, this
refere-se ao person
objeto.
5. esta função interna interna
Quando você acessa this
dentro de uma função interna (dentro de um método), this
refere-se ao objeto global. Por exemplo,
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();
Resultado
(nome: "Jack", idade: 25, saudação: ƒ) 25 Janela (…) indefinida
Aqui, this
dentro innerFunc()
se refere ao objeto global porque innerFunc()
está dentro de um método.
Porém, this.age
fora innerFunc()
se refere ao person
objeto.
6. esta função de seta interna
Dentro da função de seta, this
refere-se ao escopo pai. Por exemplo,
const greet = () => ( console.log(this); ) greet(); // Window (… )
As funções de seta não têm suas próprias this
. Quando você usa this
dentro de uma função de seta, this
refere-se ao seu objeto de escopo pai. Por exemplo,
const greet = ( name: 'Jack', // method sayHi () ( let hi = () => console.log(this.name); hi(); ) ) greet.sayHi(); // Jack
Aqui, this.name
dentro da hi()
função se refere ao greet
objeto.
Você também pode usar a função de seta para resolver o problema de ter undefined
ao usar uma função dentro de um método (como visto no Exemplo 5). Por exemplo,
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();
Resultado
(nome: "Jack", idade: 25, cumprimentar: ƒ) 25 (nome: "Jack", idade: 25, cumprimentar: ƒ) 25
Aqui, innerFunc()
é definido usando a função de seta. Ele tira this
do seu escopo pai. Portanto, this.age
dá 25 .
Quando a função de seta é usada com this
, ela se refere ao escopo externo.
7. esta função interna com modo estrito
Quando this
é usado em uma função com modo estrito, this
é undefined
. Por exemplo,
'use strict'; this.name = 'Jack'; function greet() ( // this refers to undefined console.log(this); ) greet(); // undefined
Nota : Ao usar this
dentro de uma função com modo estrito, você pode usar JavaScript Function call ().
Por exemplo,
'use strict'; this.name = 'Jack'; function greet() ( console.log(this.name); ) greet.call(this); // Jack
Quando passa this
com a call()
função, greet()
é tratado como o método do this
objeto (objeto global neste caso).