Junior
Kā mainīt funkcijas kontekstu JavaScript?
sobes.tech AI
Atbilde no AI
JavaScript funkcijas izpildes konteksts (this vērtība) var tikt mainīts vairākos veidos:
-
call(): Izpilda funkciju ar norādītuthisvērtību un argumentiem, kas tiek nodoti atsevišķi, atdalīti ar komatu.// function.call(thisArg, arg1, arg2, ...) function greet(name) { console.log(`Sveiki, ${name}! Esmu ${this.type}`); } const obj = { type: 'objekts' }; greet.call(obj, 'Alise'); // Sveiki, Alise! Esmu objekts -
apply(): Izpilda funkciju ar norādītuthisvērtību un argumentiem, kas tiek nodoti kā masīvs vai līdzīgs masīvam objekts.// function.apply(thisArg, [argsArray]) function sum(a, b) { console.log(`${this.name}: ${a + b}`); } const context = { name: 'Skaitītājs' }; const numbers = [5, 10]; sum.apply(context, numbers); // Skaitītājs: 15 -
bind(): Izveido jaunu funkciju, kas ir "sasaistīta" ar norādītuthisvērtību. Oriģinālā funkcija netiek izpildīta uzreiz.// function.bind(thisArg, arg1, arg2, ...) const user = { name: 'Bobs' }; function sayHello() { console.log(`Mana vārds ir ${this.name}`); } const boundSayHello = sayHello.bind(user); boundSayHello(); // Mana vārds ir Bobs -
Līnijas funkcijas (
=>): Tās nav ar savuthis. Tās aizķerthisno leksiskās vides (no parastās vecāku skopas, kur tās tika definētas).class MyClass { constructor() { this.value = 'klases vērtība'; // Līnijas funkcija saglabā klases kontekstu this.logValue = () => { console.log(this.value); }; } } const instance = new MyClass(); const method = instance.logValue; method(); // klases vērtība (konteksts saglabāts) // Salīdziniet ar parastu funkciju bez bind class AnotherClass { constructor() { this.value = 'cita vērtība'; this.logValue = function() { console.log(this.value); // 'this' būs window vai undefined stingrā režīmā }; } } const anotherInstance = new AnotherClass(); const anotherMethod = anotherInstance.logValue; anotherMethod(); // undefined (konteksts zaudēts)