Middle
խոսեք JavaScript-ում ֆունկցիաների կոնտեքստի մասին։
sobes.tech AI
Պատասխան AI-ից
JavaScript- ում գործառույթի կատարման կոնտեքստը (this) որոշում է, թե ինչպես է գործառույթը կանչվում և ինչ արժեքներ հասանելի են նրա ներսում: Կոնտեքստը դինամիկորեն փոխվում է կանչման եղանակից կախված:
- Գլոբալ կոնտեքստ: Ֆունկցիաներից դուրս,
thisհղվում է գլոբալ օբյեկտին (windowբրաուզերում,globalNode.js-ում):// Բրաուզերում console.log(this === window); // true // Node.js-ում console.log(this === global); // true - Ֆունկցիայի կոնտեքստ:
- Ստանդարտ կանչում: Անստրիկ ռեժիմում
thisհղվում է գլոբալ օբյեկտին (եթե ֆունկցիան չի օբյեկտի մեթոդ): Ստրիկ ռեժիմում ("use strict";)thisկլինիundefined:function showThis() { console.log(this); } showThis(); // Անստրիկ ռեժիմում՝ Գլոբալ օբյեկտ; Ստրիկ ռեժիմում՝ `undefined` - Որոշման որպես օբյեկտի մեթոդ:
thisհղվում է օբյեկտին, որի մաս է կազմում մեթոդը:
const user = { name: 'Alice', greet: function() { console.log("Hello, my name is " + this.name); } }; user.greet(); // Hello, my name is Alice - Համար
new-ով (կոնստրուկտոր):- Ստեղծում է նոր օբյեկտ, որը դառնում է
this-ի արժեքը կոնստրուկտոր ֆունկցիայում, և վերադարձնում այդ օբյեկտը:
function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob - Ստեղծում է նոր օբյեկտ, որը դառնում է
- Հստակ կոնտեքստի նշում (
call,apply,bind):call(thisArg, arg1, arg2, ...): Կատարում է ֆունկցիան նշվածthis-ով և առանձին նշված արգումենտներով:apply(thisArg, [argsArray]): Կատարում է ֆունկցիան նշվածthis-ով և արգումենտներով զանգվածով:bind(thisArg, arg1, arg2, ...): Վերադարձնում է նոր ֆունկցիա, որիthis-ը հավերժորեն կապված էthisArg-ի հետ և արգումենտների:
function introduce(greeting, punctuation) { console.log(greeting + ", I am " + this.name + punctuation); } const person = { name: 'Charlie' }; introduce.call(person, "Hi", "!"); // Hi, I am Charlie! introduce.apply(person, ["Hello", "."]); // Hello, I am Charlie. const boundIntroduce = introduce.bind(person, "Hey"); boundIntroduce("?"); // Hey, I am Charlie?
- Ստանդարտ կանչում: Անստրիկ ռեժիմում
- Արո ֆունկցիաներ: Չունեն սեփական
this, այն ժառանգում են շրջակա լեքսիկային միջավայրից, որտեղ դրանք սահմանվել են:const obj = { name: 'David', sayLater: function() { // `this` այստեղ հղվում է `obj` setTimeout(() => { // `this` այստեղ նույնպես հղվում է `obj` (ժառանգված `sayLater`-ից) console.log("Later, I am " + this.name); }, 1000); } }; obj.sayLater(); // Later, I am David