Junior
JavaScriptda funktsiya kontekstini qanday o'zgartirish mumkin?
sobes.tech AI
AIdan javob
JavaScriptda, funksiyaning bajarilish konteksti (this) bir necha usul bilan o'zgartirilishi mumkin:
-
call(): Funksiyani belgilanganthisqiymati va vergul bilan ajratilgan argumentlar bilan bajaradi.// function.call(thisArg, arg1, arg2, ...) function greet(name) { console.log(`Salom, ${name}! Men ${this.type}`); } const obj = { type: 'obyekt' }; greet.call(obj, 'Alisa'); // Salom, Alisa! Men obyekt -
apply(): Funksiyani belgilanganthisqiymati va argumentlar ro'yxati yoki array-like ob'ekti sifatida o'tkaziladi.// function.apply(thisArg, [argsArray]) function sum(a, b) { console.log(`${this.name}: ${a + b}`); } const context = { name: 'Hisoblagich' }; const numbers = [5, 10]; sum.apply(context, numbers); // Hisoblagich: 15 -
bind(): Belgilanganthisqiymatiga "bog'langan" yangi funksiyani yaratadi. Asl funksiyani darhol chaqirmaydi.// function.bind(thisArg, arg1, arg2, ...) const user = { name: 'Bob' }; function sayHello() { console.log(`Mening ismim ${this.name}`); } const boundSayHello = sayHello.bind(user); boundSayHello(); // Mening ismim Bob -
O'q funksiyalari (
=>): O'q funksiyalari o'ziningthiskontekstiga ega emas. Ularthisni leksikal muhitdan (ular ta'riflangan yuqori scope) oladi.class MyClass { constructor() { this.value = 'sinf qiymati'; // O'q funksiyasi sinf kontekstini saqlaydi this.logValue = () => { console.log(this.value); }; } } const instance = new MyClass(); const method = instance.logValue; method(); // sinf qiymati (kontekst saqlanadi) // Bind qilmasdan oddiy funksiya bilan solishtiring class BoshqaSinf { constructor() { this.value = 'boshqa qiymat'; this.logValue = function() { console.log(this.value); // 'this' window yoki strict rejimda undefined bo'ladi }; } } const boshqaInstance = new BoshqaSinf(); const boshqaMethod = boshqaInstance.logValue; boshqaMethod(); // undefined (kontekst funktsiya sifatida chaqirilganda yo'qoladi)