Разбиране на „това“ в JavaScript
След като съм работил в сайтове с над 50 милиарда посещения на уебсайтове годишно с Higglo Digital, пиша за технически теми и уча инженерите да имат солидни основи, които ще им помогнат да напреднат в кариерата си. Също така създавам страхотни продукти за цифрови номади — вижте го!
В JavaScript ключовата дума this
се отнася до обекта, който в момента изпълнява кода. Може да се използва за препратка към самия обект или за достъп до неговите свойства и методи.
Една често срещана употреба на this
е да се отнася до текущия обект в метод. Например:
const obj = { name: 'My Object', sayName: function() { console.log(`My name is ${this.name}`); } } obj.sayName(); // Output: "My name is My Object"
В този пример методът sayName
използва this
за достъп до свойството name
на обекта obj
.
Друга често срещана употреба на this
е да се обвърже функция към конкретен обект. Това може да бъде полезно при предаване на метод като обратно извикване или при работа с манипулатори на събития.
Например:
const button = document.querySelector('button'); const obj = { name: 'My Object', sayName: function() { console.log(`My name is ${this.name}`); } } button.addEventListener('click', obj.sayName.bind(obj));
В този пример методът sayName
е обвързан с обекта obj
с помощта на метода bind
. Когато се щракне върху бутона, методът sayName
ще се изпълни с „this“, зададен на обекта „obj“, а не на елемента бутон.
Важно е да се отбележи, че стойността на this
може да се променя в зависимост от това как се извиква дадена функция. В примерите по-горе this
се отнася до обекта, на което функцията е свойство. Ако обаче функцията се извика като самостоятелна функция, this
ще препраща към глобалния обект (обикновено „прозорец“ в браузъра).
Например:
function sayName() { console.log(`My name is ${this.name}`); } const obj = { name: 'My Object', sayName: sayName } obj.sayName(); // Output: "My name is My Object" sayName(); // Output: "My name is undefined" (in the browser)
Във втория пример функцията sayName
се извиква директно, така че this
препраща към глобалния обект. За да избегнете това поведение, можете да използвате метода bind
, както е показано в предишния пример, или можете да използвате методите call
или apply
, за да укажете стойността на this
при извикване на функцията.
Например:
function sayName(greeting) { console.log(`${greeting} My name is ${this.name}`); } const obj = { name: 'My Object' } sayName.call(obj, 'Hello'); // Output: "Hello My name is My Object" sayName.apply(obj, ['Hello']); // Output: "Hello My name is My Object"
В тези примери методите call
и apply
се използват за указване на стойността на this
” при извикване на функцията sayName
. Първият аргумент на call
или apply
е стойността на this
, която искате да използвате, и всички допълнителни аргументи се предават на функцията както обикновено.
Основах Higglo Digital и ние можем да помогнем на вашия бизнес да смаже уеб играта с награден уебсайт и авангардна дигитална стратегия. Ако искате да видите красиво проектиран уебсайт, проверете ни.
Също така създадох Wanderlust Extension, за да открия най-красивите места по света с изключително подбрано съдържание. Виж това!