⊗jsPmCxCL 435 of 505 menu

Губење на контекст во JavaScript

Нека имаме функција во функција. Ајде надворешната функција да ја наречеме parent, а внатрешната - child:

function parent() { function child() { } }

Од претходните лекции знаете дека ако се зададе која било променлива во надворешната функција - таа ќе биде достапна во внатрешната:

function parent() { let str = 'abcde'; function child() { console.log(str); // ќе испише 'abcde' } child(); // ја повикуваме внатрешната функција } parent(); // ја повикуваме надворешната функција

Сепак, постои нијанса: внатрешната функција има пристап до сите променливи на надворешната, но не има пристап до this. Тоа е: ако надворешната функција е врзана за некој DOM елемент, тогаш this во неа ќе покажува кон тој елемент, но this на внатрешната функција - нема да покажува!

Кон што тогаш ќе покажува this на внатрешната функција? Одговор: тој ќе биде еднаков на undefined (во строг режим), бидејќи функцијата не е врзана за ништо.

Ајде да провериме во пракса. Нека имаме внесено поле:

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

Да ја врземе за ова внесено поле функцијата parent, која ќе се повикува при загуба на фокусот на внесеното поле:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); // Ќе се повика при загуба на фокусот: function parent() { // тука ќе има некој код function child() { // тука ќе има некој код } child(); // ја повикуваме ќерка функцијата }

Ајде да го испечатиме содржината на this во конзола на две места: внатре во функцијата parent и внатре во функцијата child:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this); // ќе испише референца до нашето внесено поле function child() { console.log(this); // ќе испише undefined } child(); }

Стартувајте го овој код, изгубете го фокусот на внесеното поле и погледнете во конзола - ќе видите дека првиот console.log ќе испише во конзола референца до нашето внесено поле, а вториот - само undefined. Ваква ситуација, кога this на неочекуван начин за нас не покажува кон тоа што ни е потребно, се нарекува губење на контекст.

Нека сега во едната и во втората функција ние ќе ја печатиме value на внесеното поле. Одредете, што ќе се испише во линиите код, означени со коментари:

"use strict"; let elem = document.querySelector('#elem'); elem.addEventListener('blur', parent); function parent() { console.log(this.value); // што ќе испише? function child() { console.log(this.value); // што ќе испише? } child(); }
Македонски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј