ფუნქციაში კონტექსტი რა არის?
sobes.tech AI
პასუხი AI-სგან
JavaScript-те (this) контекст аныкталган функцияны кандайча чакырганыңызга жараша болот, ал анын кайда жарыяланганына эмес. Ал функциянын тиешелүү объектине же аны чакырган объектке шилтеме кылат.
Контекстти аныктоо жолдору:
-
Глобалдык контекст: функциядан тышкары же функция так объект менен чакырылбаса (
thisбраузерде глобалдык объектwindowболот, Node.jsдеglobal, же strict режимдеundefined).// Браузерде console.log(this === window); // чын function showContext() { console.log(this); } showContext(); // window -
Объекттин контексти (метод): Эгер функция объекттин методу катары чакырылса (
obj.method()), андаthisошол объектке шилтеме кылат.const user = { name: 'Alice', greet: function() { console.log(`Салам, мен ${this.name}`); } }; user.greet(); // Салам, мен Alice -
Курулмочу контекст: Функция
newменен чакырылса (new MyClass()), жаңы объект түзүлөт жанаthisошол жаңы объектке шилтеме кылат.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob -
Ачык көрсөтүлгөн контекст:
call,applyжанаbindметоддоруthisмаанисин так белгилөөгө мүмкүндүк берет.call(thisArg, arg1, arg2, ...): функцияны белгилүүthisменен жана аргументтер менен чакырат.apply(thisArg, [argsArray]): функцияны белгилүүthisменен жана массив түрүндөгү аргументтер менен чакырат.bind(thisArg, arg1, arg2, ...): жаңы функция түзүп, анынthis-и белгиленет.
function displayInfo(age) { console.log(`${this.name} ${age} жашта.`); } const person = { name: 'Charlie' }; displayInfo.call(person, 30); // Charlie 30 жашта displayInfo.apply(person, [35]); // Charlie 35 жашта const bondedDisplayInfo = displayInfo.bind(person, 40); bondedDisplayInfo(); // Charlie 40 жашта -
Жебе функциялары: Жебе функциялар өзүнүн
this-и жок. Алар лексикалык чөйрөдөнthis-ди мурас катары алат (алар аны аныктоочу жерде).const anotherUser = { name: 'David', sayHello: function() { const innerArrow = () => { console.log(`Салам жебе, ${this.name}`); }; innerArrow(); // `this` бул жерде - anotherUser, мурас алган sayHello'дон }, sayHelloBad: () => { // жаман пракси объекттин методдору үчүн console.log(`Салам жебе, ${this.name}`); } }; anotherUser.sayHello(); // Салам жебе, David // Браузерде, strict режимден тышкары anotherUser.sayHelloBad(); // Салам жебе, undefined (this - window)
Контекстти түшүнүү JavaScript объекттери, методдору жана иш-чара иштетүүчүлөрү менен иштөөдө маанилүү.