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";)thisundefinedболот: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