"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Comprender la palabra clave `this` en JavaScript

Comprender la palabra clave `this` en JavaScript

Publicado el 2024-08-07
Navegar:734

Understanding the `this` Keyword in JavaScript

La palabra clave this en JavaScript puede ser uno de los conceptos más confusos para los nuevos desarrolladores. Su valor puede cambiar según dónde se utilice, por lo que es fundamental comprender su comportamiento en diferentes contextos. Este artículo desmitificará la palabra clave this explorando su uso en varios escenarios.

¿Qué es esto?

En JavaScript, esto se refiere al contexto en el que se ejecuta una función. Proporciona una forma de acceder a las propiedades y métodos de un objeto desde el propio objeto.

Contexto global

Cuando se usa en el contexto global (fuera de cualquier función u objeto), esto se refiere al objeto global. En un navegador web, el objeto global es ventana.

console.log(this); // In a browser, this will log the window object

Contexto de función

Cuando se usa dentro de una función, esto depende de cómo se llama la función.

Llamada de función regular

En una llamada de función normal, esto se refiere al objeto global (o indefinido en modo estricto).

function showThis() {
  console.log(this);
}

showThis(); // Logs window (or undefined in strict mode)

Llamada al método

Cuando se llama a una función como método de un objeto, esto se refiere al objeto mismo.

const person = {
  name: 'Alice',
  greet: function() {
    console.log(this.name);
  }
};

person.greet(); // Logs "Alice"

Contexto del constructor

Cuando una función se usa como constructor con la palabra clave new, esto se refiere a la instancia recién creada.

function Person(name) {
  this.name = name;
}

const bob = new Person('Bob');
console.log(bob.name); // Logs "Bob"

Funciones de flecha

Las funciones de flecha tienen un comportamiento diferente. No tienen su propio contexto; en cambio, heredan esto del contexto léxico circundante.

const obj = {
  name: 'Carol',
  regularFunction: function() {
    console.log(this.name);
  },
  arrowFunction: () => {
    console.log(this.name);
  }
};

obj.regularFunction(); // Logs "Carol"
obj.arrowFunction();   // Logs undefined (or the global object in non-strict mode)

Controladores de eventos

En los controladores de eventos, esto se refiere al elemento que recibió el evento.

document.getElementById('myButton').addEventListener('click', function() {
  console.log(this); // Logs the button element
});

Enlace explícito

JavaScript proporciona métodos para establecer explícitamente el valor de this usando call, apply y bind.

llama y aplica

Los métodos call y apply le permiten invocar una función con este valor especificado.

function introduce() {
  console.log(`Hello, my name is ${this.name}`);
}

const person = { name: 'Dave' };

introduce.call(person); // Logs "Hello, my name is Dave"
introduce.apply(person); // Logs "Hello, my name is Dave"

La diferencia entre llamar y aplicar es cómo manejan los argumentos. call toma los argumentos individualmente, mientras que apply los toma como una matriz.

unir

El método de vinculación crea una nueva función que, cuando se llama, tiene este valor establecido en el valor proporcionado.

function introduce() {
  console.log(`Hello, my name is ${this.name}`);
}

const person = { name: 'Eve' };

const boundIntroduce = introduce.bind(person);
boundIntroduce(); // Logs "Hello, my name is Eve"

Conclusión

Comprender la palabra clave this es esencial para dominar JavaScript. Al reconocer cómo se comporta esto en diferentes contextos, puede escribir código más predecible y fácil de mantener. Ya sea que esté trabajando con métodos, constructores o funciones de flecha, saber cómo funciona le ayudará a evitar errores comunes y aprovechar su poder de manera efectiva.

Declaración de liberación Este artículo se reproduce en: https://dev.to/mdhassanpatwary/understanding-the-this-keyword-in-javascript-12ea?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3