Перейти до основного контенту

Як працює ключове слово this: повне керівництво

11 хв читання
1718 переглядів

Ключове слово this - один з найбільш важливих елементів в мові програмування JavaScript. Розуміння того, як це працює, є фундаментальним для ефективного використання мови. Ключове слово this використовується для посилання на поточний об'єкт або контекст, в якому виконується поточна функція.

Ключове слово this може мати різні значення залежно від контексту виконання. Він може посилатися на глобальний об'єкт window у середовищі браузера або на об'єкт, до якого належить метод, у якому він використовується. А також значення this можуть бути явно задані при виклику функції за допомогою методів call() і apply().

Правильне використання ключового слова this допомагає уникнути плутанини і помилок при розробці JavaScript-коду. У цьому посібнику ми розглянемо основні випадки використання ключового слова this і роз'яснимо, як воно працює в різних ситуаціях. Ми також розглянемо його відмінності від змінних контексту та покажемо, як використовувати this у строгому режимі.

Визначення ключового слова this

Значення this визначається під час виконання коду і залежить від контексту виклику функції або методу. Контекст виклику визначається способом виклику функції і може бути різним.

Коли функція викликається як метод об'єкта, this посилається на цей об'єкт. Наприклад:

const person = >;
В даному прикладі this вказує на об'єкт person. Використовувати this.name, ми отримуємо доступ до властивості name об'єкт person.


Коли функція викликається в звичайному режимі або стрілочної функцією, значення this залежить від контексту виклику і може вказувати на глобальний об'єкт window (у браузері) або global (у Node.js), Якщо контекст виклику не заданий.


Ключове слово this відіграє важливу роль в об'єктно-орієнтованому програмуванні і дозволяє управляти контекстом виконання коду. Правильне використання this допомагає створювати більш гнучкий і масштабований код.




Контекст виконання


Ключевое слово this в JavaScript ссылается на объект, в контексте которого выполняется текущая функция.
Контекст исполнения, также называемый контекстом вызова функции, определяет значение this внутри функции.
Значение this может быть установлено явно при вызове функции, а также зависит от способа вызова функции.
В глобальной области видимости, за пределами функций, значение this ссылается на объект window – глобальный объект браузера.
В методах объекта, значение this ссылается на сам объект, в контексте которого вызывается метод.
Анонимные функции, вызванные как обработчики событий или обратные вызовы, имеют значение this, которое определяется механизмом вызова функции.
Ключевое слово this играет ключевую роль при доступе к свойствам и методам объектов, а также при работе с прототипами и наследованием.
Важно понимать контекст исполнения, чтобы правильно использовать ключевое слово this и избегать ошибок в коде.

Як this пов'язано з контекстом виконання


Когда функция вызывается как метод объекта, значение this ссылается на этот объект. Например, если у нас есть объект person и метод sayHello:
let person = >;person.sayHello(); // Привет, меня зовут John

В этом случае, при вызове метода sayHello у объекта person, значение this ссылается на сам объект person, и мы можем получить доступ к его свойствам и методам.
Однако, если функция вызывается без контекста объекта, значение this будет ссылаться на глобальный объект (в браузере это объект window, в Node.js – объект global). Например:
function sayHello() let name = "John";sayHello(); // Привет, меня зовут John

В этом случае, функция sayHello вызывается без объекта, поэтому значение this ссылается на глобальный объект, и мы можем получить доступ к глобальной переменной name.
Кроме того, значение this может быть изменено с помощью методов call и apply. Эти методы позволяют явно указать, какой объект будет использоваться в качестве значения this. Например:
let person1 = ;let person2 = ;function sayHello() sayHello.call(person1); // Привет, меня зовут JohnsayHello.call(person2); // Привет, меня зовут Jane

В этом примере, мы используем метод call для вызова функции sayHello с объектом person1 в качестве значения this. В результате, значение this ссылается на объект person1, и мы можем получить доступ к его свойству name.
Понимание того, как значение this связано с контекстом исполнения, является важным аспектом разработки на JavaScript и помогает избежать ошибок и неожиданного поведения кода.

Різні способи визначення контексту виконання


Ключевое слово this в JavaScript позволяет определить контекст исполнения, то есть объект, на котором вызывается функция. В зависимости от того, как вызывается функция, значение this может быть разным. Рассмотрим несколько способов определения контекста исполнения.

1. У глобальній області видимості


Если функция вызывается в глобальной области видимости, то значение this будет ссылаться на глобальный объект, например, window в браузере или global в Node.js.

2. Всередині функції


Когда функция вызывается как метод объекта, значение this будет ссылаться на сам объект, на котором вызывается функция. Например:
const obj = !`);>>;obj.sayHello(); // Output: Hello, John!

3. Всередині конструктора


При использовании функции-конструктора с помощью ключевого слова new, значение this будет ссылаться на новый экземпляр объекта, созданный с помощью конструктора. Например:
function Person(name) const john = new Person('John');console.log(john.name); // Output: John

4. За допомогою методів call і apply


Методы call и apply позволяют явным образом указать значение this при вызове функции. Метод call принимает аргументы в виде отдельных значений, а метод apply принимает аргументы в виде массива. Например:
function sayHello() !`);>const obj = ;sayHello.call(obj); // Output: Hello, John!

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

Приклади використання


Ключевое слово this часто используется в объектно-ориентированном программировании для обращения к текущему объекту внутри его методов. Рассмотрим несколько примеров его использования:
  1. Використання this для доступу до властивостей об'єкта:
const person = , Age: $`;>>;console.log(person.getDetails()); // Output: "Name: John, Age: 30"
const calculator = ,subtract(num) ,multiply(num) ,getResult() >;const result = calculator.add(5).multiply(2).subtract(3).getResult();console.log(result); // Output: 7
function Person(name, age) Person.prototype.getDetails = function() , Age: $`;>;const john = new Person('John', 30);console.log(john.getDetails()); // Output: "Name: John, Age: 30"

В каждом из этих примеров ключевое слово this ссылается на текущий объект, позволяя получить доступ к его свойствам и методам. Оно является мощным и удобным инструментом в объектно-ориентированном программировании.

Приклади використання this в об'єктах


Ключевое слово this в JavaScript используется для ссылки на текущий объект, в котором был вызван метод или происходит выполнение кода. Ниже приведены примеры, в которых this используется для доступа к свойствам и методам объекта.
  • Приклад 1:
var person = >;var info = person.getInfo();console.log(info); // Output: "My name is John and I am 25 years old."
var calculator = ,difference: function() >;console.log(calculator.sum()); // Output: 15console.log(calculator.difference()); // Output: 5
function Car(make, model) ;>var myCar = new Car("Toyota", "Camry");console.log(myCar.getFullInfo()); // Output: "Make: Toyota, Model: Camry"

Использование ключевого слова this помогает избежать конфликтов между различными объектами и обеспечить правильную работу методов и свойств в контексте объекта, в котором они были определены.

Приклади використання this у функціях


Ключевое слово this в JavaScript используется внутри функций и ссылается на объект, который вызывает данную функцию. Рассмотрим несколько примеров, чтобы ознакомиться с различными ситуациями использования this.
1. Пример использования this в методе объекта:
const obj = >;

2. Пример использования this в конструкторе объекта:
function Person(name, age) Person.prototype.sayHello = function() ;const john = new Person('John', 30);

3. Пример использования this в функции обратного вызова:
const btn = document.querySelector('button');btn.addEventListener('click', function() );

В данном случае, при клике на кнопку, функция обратного вызова будет вызываться с контекстом this, указывающим на саму кнопку.
4. Пример использования this в стрелочной функции:
const obj = , 1000);>>;

Стрелочные функции не имеют своего контекста this, поэтому внутри них this ссылается на контекст родительской функции. В данном примере, this внутри setTimeout ссылается на объект obj.
Использование ключевого слова this в JavaScript является важной частью понимания работы объектов и функций. Разбирая различные примеры и контексты, вы сможете лучше усвоить его поведение и использовать его в своих проектах.