Маънии муҳити иҷрои `this` дар JavaScript аз чӣ вобаста аст?
sobes.tech AI
Ҷавоб аз AI
Арзиши this дар JavaScript вобаста аз усулҳои даъвати функсия аст. Сенарияҳои асосӣ:
-
Масоҳати глобалӣ: Дар функсияҳо, дар режими сахт (
'use strict')thisundefinedаст. Бе режими сахт — объектии глобалӣ (windowдар браузер,globalдар Node.js). -
Даъвати методи объект:
thisба объекти ишора мекунад, ки ба он методи даъватшуда тааллуқ дорад.const obj = { prop: 'қимат', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Даъвати оддӣ: Дар режими сахт
thisundefinedаст. Бе режими сахт — объектии глобалӣ.function myFunction() { // дар режими сахт this === undefined // бе режими сахт this === window (дар браузер) console.log(this); } myFunction(); -
Конструктор (
new): Вақте ки боnewистифода мешавад,thisдар дохили функсия ба объекти навтаъсисшуда ишора мекунад.function MyClass(name) { this.name = name; // this === объекти нав } const instance = new MyClass('тест'); // instance.name === 'тест' -
Васлкунии равшан (
call,apply,bind): Ин усулҳо имкон медиҳанд, ки баthisарзиши равшан таъин карда шавад.call(thisArg, arg1, arg2, ...): функсияро даъват мекунад,this-ро баthisArgтаъин мекунад ва аргументҳоро ба таври алоҳида мегузорад.apply(thisArg, [argsArray]): функсияро даъват мекунад,this-ро баthisArgтаъин мекунад ва аргументҳоро ҳамчун массив мегузорад.bind(thisArg): функсияи навро боthis-и мустаҳкамшуда бармегардонад.
const anotherObj = { value: 42 }; function showValue() { console.log(this.value); } showValue.call(anotherObj); // Натиҷа: 42 -
Функсияҳои стрелка (
=>): Функсияҳои стрелка соҳибиthisнестанд. Арзишиthisдар функсияи стрелка аз контексти лексикалӣ, ки дар он муайян шудааст, мерос мегирад.const outerObj = { name: 'Барои', method: function() { const arrowFunc = () => { // this дар ин ҷо аз method, ки ҳамчун методи outerObj даъват мешавад, мерос мегирад console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // Натиҷа: 'Барои' const anotherArrowFunc = () => { // this дар ин ҷо аз контексти глобалӣ (ё `undefined` дар режими сахт) мерос мегирад console.log(this); }; anotherArrowFunc(); -
Ҳолатҳо дар DOM: Дар аксари ҳолатҳо,
thisдар ҳангоми коркарди ҳодиса ба унсури DOM ишора мекунад, ки ҳодиса рӯй додааст.// Мисол дар браузер const button = document.querySelector('button'); button.addEventListener('click', function() { // this === button console.log(this.tagName); });
Фаҳмидани ин механизмҳо барои истифодаи дуруст ва самараноки this дар JavaScript муҳим аст.