Funksiyada kontekst nədir?
sobes.tech Süni İntellekt
AI-dan cavab
JavaScript-də (this) kontekst funksiyanın necə çağırıldığına görə müəyyən edilir, onun elan olunduğu yerə deyil. O, funksiyaya aid olan obyektə və ya onu çağıran obyektə işarə edir.
Konteksti müəyyən etməyin yolları:
-
Qlobal kontekst: Funksiyalar xaricində və ya funksiyanı açıq obyekt olmadan çağırdıqda (
thisbrauzerdəwindow, Node.js-dəglobal, və ya strict rejimdəundefinedolur).// Brauzerdə console.log(this === window); // true function showContext() { console.log(this); } showContext(); // window -
Obyekt konteksti (metod): Əgər funksiya obyektin metodu kimi çağırılırsa (
obj.method()),thisfunksiyanın içində həmin obyektə istinad edir.const user = { name: 'Alice', greet: function() { console.log(`Salam, mənim adım ${this.name}`); } }; user.greet(); // Salam, mənim adım Alice -
Konstruktor konteksti:
newaçar sözü ilə çağırıldıqda (new MyClass()), yeni obyekt yaradılır və konstruktor içindəthishəmin yeni obyektə istinad edir.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob -
Açıq kontekst göstərişi:
call,applyvəbindmetodları iləthis-in dəyərini açıq şəkildə təyin etmək mümkündür.call(thisArg, arg1, arg2, ...): FunksiyanıthisthisArgilə və argumentlərlə çağırır.apply(thisArg, [argsArray]): FunksiyanıthisthisArgilə və argumentləri massiv kimi verərək çağırır.bind(thisArg, arg1, arg2, ...):this-i müəyyənləşdirilmiş yeni funksiya qaytarır.
function displayInfo(age) { console.log(`${this.name} ${age} yaşında.`); } const person = { name: 'Charlie' }; displayInfo.call(person, 30); // Charlie 30 yaşında. displayInfo.apply(person, [35]); // Charlie 35 yaşında. const bondedDisplayInfo = displayInfo.bind(person, 40); bondedDisplayInfo(); // Charlie 40 yaşında. -
Ox funksiyalar: Ox funksiyalarının öz
this-i yoxdur. Onlarthis-i leksikal mühitdən miras alır.const anotherUser = { name: 'David', sayHello: function() { const innerArrow = () => { console.log(`Salam arrow ilə, ${this.name}`); }; innerArrow(); // `this` burada anotherUser, sayHello-dan miras alır }, sayHelloBad: () => { // obyekt metodları üçün pis təcrübə console.log(`Salam arrow ilə, ${this.name}`); } }; anotherUser.sayHello(); // Salam arrow ilə, David // Brauzerdə, strict rejimdən kənarda anotherUser.sayHelloBad(); // Salam arrow ilə, undefined (`this` - window)
Kontekstin anlaşılması JavaScript-də obyektlər, metodlar və hadisə idarəediciləri ilə düzgün işləmək üçün çox vacibdir.