Junior
Чӣ гуна метавонистам контексти функсияро дар JavaScript тағир диҳам?
sobes.tech AI
Ҷавоб аз AI
JavaScript-да функциянинг ижро контексти (this қиймати) бир неча усул билан ўзгартирилиши мумкин:
-
call(): Функцияни белгиланганthisқиймати ва аргументлар билан, улар алоҳида, vergul билан ажратилиб, ишга туширади.// function.call(thisArg, arg1, arg2, ...) function greet(name) { console.log(`Salom, ${name}! Men ${this.type}`); } const obj = { type: 'объект' }; greet.call(obj, 'Алиса'); // Salom, Алиса! Men объект -
apply(): Функцияни белгиланганthisқиймати ва аргументларини массив ёки слич массив шаклида ўтказиш орқали ишга туширади.// function.apply(thisArg, [argsArray]) function sum(a, b) { console.log(`${this.name}: ${a + b}`); } const context = { name: 'Калькулятор' }; const numbers = [5, 10]; sum.apply(context, numbers); // Калькулятор: 15 -
bind(): Янгича функция яратади, уланганthisқийматига. Оригинал функция жадвалдача ишга туширилмайди.// function.bind(thisArg, arg1, arg2, ...) const user = { name: 'Боб' }; function sayHello() { console.log(`Менинг исмим ${this.name}`); } const boundSayHello = sayHello.bind(user); boundSayHello(); // Менинг исмим Боб -
Стрелка функциялар (
=>): Улар ўзинингthisқийматга эга эмас. Улар лексикал муҳитдан (this) олади.class MyClass { constructor() { this.value = 'класс қиймати'; // Стрелка функция класс контекстини сақлайди this.logValue = () => { console.log(this.value); }; } } const instance = new MyClass(); const method = instance.logValue; method(); // класс қиймати (контекст сақланган) // Оддий функция билан солиштирганда, bind қўлланмаган class AnotherClass { constructor() { this.value = 'бошқа қиймат'; this.logValue = function() { console.log(this.value); // 'this' бўлади window ёки strict режимда undefined }; } } const anotherInstance = new AnotherClass(); const anotherMethod = anotherInstance.logValue; anotherMethod(); // undefined (контекст йўқолган)