⊗jsPmCxInr 433 of 505 menu

Основи на работа с контекст в JavaScript

Да предположим, че имаме някаква функция func, вътре в която се използва this:

function func() { console.log(this.value); }

На какво сочи this в тази функция? А ние не знаем. И JavaScript не знае. И самата функция не знае. Тоест в момента на създаване на функцията това, на което сочи this, не е определено. И ще се определи едва тогава, когато тази функция бъде извикана.

Да предположим, че имаме някакво поле за въвеждане:

<input id="elem" value="text">

Нека свържем към това поле нашата функция func така, че да се изпълни при загуба на фокус от полето. Сега в момента на изпълнение на функцията this ще сочи към нашето поле за въвеждане:

let elem = document.querySelector('#elem'); elem.addEventListener('blur', func); function func() { console.log(this.value); // при загуба на фокус ще изведе 'text' }

Но ние може да имаме не едно поле, а няколко:

<input id="elem1" value="text1"> <input id="elem2" value="text2">

И към всяко едно от тези полета можем да свържем нашата функция func. В този случай за първия елемент this в момента на извикване на функцията ще сочи към него, а за втория - към него.

На практика това означава, че this вътре в функцията зависи от това на кое от полетата сме загубили фокус:

let elem1 = document.querySelector('#elem1'); elem1.addEventListener('blur', func); let elem2 = document.querySelector('#elem2'); elem2.addEventListener('blur', func); function func() { console.log(this.value); // ще изведе или 'text1', или 'text2' }

Като цяло, тази особеност на this е много удобна - ние създаваме само една функция и я свързваме с произволен брой полета за въвеждане. Ако this не сочеше към този елемент, в който се е случило събитието, тогава ние нямаше да успеем - щеше да се наложи за всяко поле да създаваме собствена функция със същия код!

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне