Ինչից է կախված `this`-ի գործարկման կոնտեքստի արժեքը JavaScript-ում?
sobes.tech AI
Պատասխան AI-ից
JavaScript- ում this-ի արժեքը կախված է ֆունկցիայի կանչման եղանակից: Հիմնական սցենարները:
-
Գլոբալ կոնտեքստ: Ֆունկցիաներից դուրս, խիստ ռեժիմում (
'use strict')this-ըundefinedէ: Բացառությամբ ռեժիմում՝ գլոբալ օբյեկտը (windowբրաուզերում,globalNode.js-ում): -
Օբյեկտի մեթոդի կանչում:
thisցույց է տալիս այն օբյեկտին, որի վրա է կանչվում մեթոդը:const obj = { prop: 'արժեք', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Ընդհանրական ֆունկցիայի կանչում: Խիստ ռեժիմում
this-ըundefinedէ: Բացառությամբ ռեժիմում՝ գլոբալ օբյեկտը: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-ում: