Ключевое слово «это» в Javascript
В этой статье мы поговорим о ключевом слове this в JavaScript. «это» — очень важная концепция в JavaScript, которую новичкам может быть трудно понять, как это было для меня, но как только вы поймете, как она работает, она может оказаться очень полезной.
Что это'? В JavaScript «это» оценивается как текущий объект, который может быть глобальным объектом, функцией или объектом, методом которого является функция. Это способ обратиться к текущему контексту, в котором выполняется код.
Как это работает? Значение this зависит от того, как вызывается функция. Есть четыре способа вызова функции в JavaScript, и каждый из них влияет на значение this.
- Глобальный контекст — когда функция вызывается в глобальном контексте, «это» относится к глобальному объекту. В веб-браузере глобальным объектом является объект окна.
// Global context function that() { console.log(`${this} is equal to global context in ex 1`) }; that();
2. Контекст метода. Когда функция вызывается как метод объекта, this относится к объекту, методом которого является функция. Другими словами, this устанавливается на объект слева от точки при вызове функции.
В примере кода мы определяем метод для объекта ex2Button
, добавляя прослушиватель событий к элементу кнопки с помощью ex2Button.addEventListener()
.
При нажатии кнопки выполняется функция прослушивания событий, и this
внутри функции ссылается на объект ex2Button
, вызвавший событие. Это позволит this
напрямую обращаться к свойствам объекта ex2Button
и управлять ими. Здесь я изменил текст на this.textContent = 'Clicked!'
// Method context const ex2Button = document.querySelector('#ex2Button'); ex2Button.addEventListener('click', function() { let newTextContent = this.textContent; this.textContent = newTextContent === 'Click Me!' ? 'Clicked' : 'Click Me!'; });
3. Контекст конструктора. Когда функция вызывается как конструктор с ключевым словом «новое», «это» относится к вновь созданному объекту. Когда вы создаете новый объект с помощью функции-конструктора, ключевое слово this
внутри функции-конструктора всегда относится к новому создаваемому объекту.
Используя this
в функции-конструкторе ниже, мы создаем новые экземпляры объекта MyItem
. Каждый экземпляр объекта будет иметь собственное свойство item
, которое ссылается на новый элемент списка, созданный при создании экземпляра объекта.
// Constructor context class MyItem { constructor(text) { this.item = document.createElement('li'); this.item.textContent = text; document.querySelector('#myList').appendChild(this.item); } } const ex3Button = document.querySelector('#ex3Button'); ex3Button.addEventListener('click', function() { const myText = "New list item!"; new MyItem(myText); });
4. Контекст вызова. Когда функция вызывается методом call, this относится к объекту, который передается в качестве первого аргумента метода.
Когда кнопка нажата, функция introduce
(которая на самом деле является методом объекта) вызывается с userTwo
в качестве объекта с использованием метода call
. Это изменяет объект, на который ссылается this
, с userOne
на userTwo
.
// Call context for example 4 const userOne = { name: 'Clinton', introduce: function() { return (`My name is ${this.name} in example 4.`); } } const userTwo = { name: 'Alan' } const user = document.querySelector('.user'); user.textContent = userOne.introduce(); const ex4Button = document.querySelector('#ex4Button'); ex4Button.addEventListener('click', () => { user.textContent = userOne.introduce.call(userTwo); });
В заключение, ключевое слово this в JavaScript относится к текущему объекту, и его значение зависит от того, как вызывается функция. Понимание этого важно для написания эффективного и безошибочного кода на JavaScript. Я надеюсь, что эта статья помогла вам объяснить понятие «это». Спасибо за чтение!