Junior
JavaScript-də funksiyanın kontekstini necə dəyişdirmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
JavaScript-də, funksiyanın icra konteksti (this) bir neçə üsulla dəyişdirilə bilər:
-
call(): Bir funksiyanı müəyyən edilmişthisdəyəri və vergüllə ayrılmış arqumentlərlə icra edir.// function.call(thisArg, arg1, arg2, ...) function greet(name) { console.log(`Salam, ${name}! Mən ${this.type}`); } const obj = { type: 'obyekt' }; greet.call(obj, 'Alyona'); // Salam, Alyona! Mən obyekt -
apply(): Bir funksiyanı müəyyən edilmişthisdəyəri və arqumentləri array və ya array-ə bənzər obyekt kimi ötürməklə icra edir.// function.apply(thisArg, [argsArray]) function sum(a, b) { console.log(`${this.name}: ${a + b}`); } const context = { name: 'Hesablama maşını' }; const numbers = [5, 10]; sum.apply(context, numbers); // Hesablama maşını: 15 -
bind(): Müəyyən edilmişthisdəyərinə "bağlanmış" yeni funksiya yaradır. Orijinal funksiya dərhal icra edilmir.// function.bind(thisArg, arg1, arg2, ...) const user = { name: 'Bob' }; function sayHello() { console.log(`Mənim adım ${this.name}`); } const boundSayHello = sayHello.bind(user); boundSayHello(); // Mənim adım Bob -
Ox funksiyaları (
=>): Ox funksiyaları özthiskontekstinə malik deyil. Onlarthis-ni leksikal mühitdən (tərif olunduğu yuxarı scope-dan) tuturlar.class MyClass { constructor() { this.value = 'sinif dəyəri'; // Ox funksiyası sinif kontekstini saxlayır this.logValue = () => { console.log(this.value); }; } } const instance = new MyClass(); const method = instance.logValue; method(); // sinif dəyəri (kontekst saxlanılır) // Bind olmadan normal funksiyaya qarşılaşdırın class DigərSinif { constructor() { this.value = 'başqa dəyər'; this.logValue = function() { console.log(this.value); // 'this' window və ya strict rejimdə undefined olacaq }; } } const digerInstance = new DigərSinif(); const digerMetod = digerInstance.logValue; digerMetod(); // undefined (kontekst itirilir, funksiyadan çağırıldıqda)