En este tutorial, aprenderá sobre esta palabra clave de JavaScript con la ayuda de ejemplos.
En JavaScript, la this
palabra clave se refiere al objeto donde se llama.
1. este alcance global interno
Cuando this
se usa solo, se this
refiere al objeto global ( window
objeto en los navegadores). Por ejemplo,
let a = this; console.log(a); // Window () this.name = 'Sarah'; console.log(window.name); // Sarah
Aquí, this.name
es lo mismo que window.name
.
2. esta función interior
Cuando this
se usa en una función, se this
refiere al objeto global ( window
objeto en los navegadores). Por ejemplo,
function greet() ( // this inside function // this refers to the global object console.log(this); ) greet(); // Window ()
3. esta función de constructor interno
En JavaScript, las funciones de constructor se utilizan para crear objetos. Cuando una función se usa como función constructora, se this
refiere al objeto dentro del cual se usa. Por ejemplo,
function Person() ( this.name = 'Jack'; console.log(this); ) let person1 = new Person(); console.log(person1.name);
Salida
Persona (nombre: "Jack") Jack
Aquí, se this
refiere al objeto person1. Por eso, person1.name
nos da Jack.
Nota : Cuando this
se usa con las clases de ES6, se refiere al objeto dentro del cual se usa (similar a las funciones de constructor).
4. este método de objeto interior
Cuando this
se usa dentro del método de un objeto, se this
refiere al objeto en el que se encuentra. Por ejemplo,
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();
Salida
(nombre: "Jack", edad: 25, saludo: ƒ) Jack
En el ejemplo anterior, se this
refiere al person
objeto.
5. esta función interior interior
Cuando accedes this
dentro de una función interna (dentro de un método), se this
refiere al objeto global. Por ejemplo,
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();
Salida
(nombre: "Jack", edad: 25, saludo: ƒ) 25 Ventana (…) indefinido
Aquí, this
inside se innerFunc()
refiere al objeto global porque innerFunc()
está dentro de un método.
Sin embargo, this.age
afuera se innerFunc()
refiere al person
objeto.
6. esta función de flecha interior
Dentro de la función de flecha, se this
refiere al ámbito principal. Por ejemplo,
const greet = () => ( console.log(this); ) greet(); // Window (… )
Las funciones de flecha no tienen las suyas propias this
. Cuando se utiliza this
dentro de una función de flecha, se this
refiere a su objeto de ámbito principal. Por ejemplo,
const greet = ( name: 'Jack', // method sayHi () ( let hi = () => console.log(this.name); hi(); ) ) greet.sayHi(); // Jack
Aquí, this.name
dentro de la hi()
función se refiere al greet
objeto.
También puede usar la función de flecha para resolver el problema de tener undefined
al usar una función dentro de un método (como se ve en el Ejemplo 5). Por ejemplo,
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();
Salida
(nombre: "Jack", edad: 25, saludo: ƒ) 25 (nombre: "Jack", edad: 25, saludo: ƒ) 25
Aquí, innerFunc()
se define mediante la función de flecha. Toma this
de su ámbito principal. Por lo tanto, this.age
da 25 .
Cuando se usa la función de flecha con this
, se refiere al alcance externo.
7. esta función interior con modo estricto
Cuando this
se utiliza en una función con modo estricto, this
es undefined
. Por ejemplo,
'use strict'; this.name = 'Jack'; function greet() ( // this refers to undefined console.log(this); ) greet(); // undefined
Nota : Cuando se usa this
dentro de una función con modo estricto, puede usar la llamada de función JavaScript ().
Por ejemplo,
'use strict'; this.name = 'Jack'; function greet() ( console.log(this.name); ) greet.call(this); // Jack
Cuando pasa this
con la call()
función, greet()
se trata como el método del this
objeto (objeto global en este caso).