«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Понимание ключевого слова `this` в JavaScript

Понимание ключевого слова `this` в JavaScript

Опубликовано 7 августа 2024 г.
Просматривать:289

Understanding the `this` Keyword in JavaScript

Ключевое слово this в JavaScript может быть одним из самых запутанных понятий для начинающих разработчиков. Его значение может меняться в зависимости от того, где он используется, поэтому крайне важно понимать его поведение в различных контекстах. Эта статья прояснит тайну этого ключевого слова, исследуя его использование в различных сценариях.

Что это?

В JavaScript это относится к контексту, в котором выполняется функция. Он предоставляет способ доступа к свойствам и методам объекта изнутри самого объекта.

Глобальный контекст

При использовании в глобальном контексте (вне какой-либо функции или объекта) это относится к глобальному объекту. В веб-браузере глобальным объектом является окно.

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

Контекст функции

При использовании внутри функции это зависит от того, как функция вызывается.

Обычный вызов функции

При обычном вызове функции это относится к глобальному объекту (или неопределенному в строгом режиме).

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

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

Вызов метода

Когда функция вызывается как метод объекта, это относится к самому объекту.

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

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

Контекст конструктора

Когда функция используется в качестве конструктора с ключевым словом new, это относится к вновь созданному экземпляру.

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

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

Стрелочные функции

Стрелочные функции ведут себя иначе. У них нет своего этого контекста; вместо этого они наследуют это из окружающего лексического контекста.

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)

Обработчики событий

В обработчиках событий это относится к элементу, получившему событие.

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

Явное связывание

JavaScript предоставляет методы для явной установки значения this с помощью вызовов, применения и привязки.

позвони и оставь заявку

Методы вызова и применения позволяют вызывать функцию с указанным значением this.

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"

Разница между вызовом и применением заключается в том, как они обрабатывают аргументы. call принимает аргументы индивидуально, а apply принимает их как массив.

связывать

Метод привязки создает новую функцию, при вызове которой в качестве значения this устанавливается указанное значение.

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"

Заключение

Понимание этого ключевого слова необходимо для освоения JavaScript. Поняв, как это ведет себя в разных контекстах, вы сможете писать более предсказуемый и удобный в сопровождении код. Независимо от того, работаете ли вы с методами, конструкторами или стрелочными функциями, знание того, как это работает, поможет вам избежать распространенных ошибок и эффективно использовать его возможности.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/mdhassanpatwary/understanding-the-this-keyword-in-javascript-12ea?1. Если обнаружено какое-либо нарушение прав, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3