No kā ir atkarīgs `this` izpildes konteksta vērtība JavaScript?
sobes.tech AI
Atbilde no AI
this vērtība JavaScript ir atkarīga no funkcijas izsaukšanas veida. Galvenie scenāriji:
-
Globālais konteksts: ārpus funkcijām, stingrā režīmā (
'use strict')thisirundefined. Bez stingrā režīma — globālais objekts (windowpārlūkprogrammā,globalNode.js). -
Objekta metodes izsaukums:
thisnorāda uz objektu, kam pieder izsauktais metodes.const obj = { prop: 'vērtība', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Parasta funkcijas izsaukšana: Stingrā režīmā
thisirundefined. Bez stingrā režīma — globālais objekts.function myFunction() { // stingrā režīmā this === undefined // bez režīma this === window (pārlūkprogrammā) console.log(this); } myFunction(); -
Konstruktors (
new): Izmantojotnewar konstruktoru funkciju,thisfunkcijas iekšienē norāda uz jauno izveidoto objektu.function MyClass(name) { this.name = name; // this === jauns objekts } const instance = new MyClass('tests'); // instance.name === 'tests' -
Īpaša sasaistīšana (
call,apply,bind): Šīs metodes ļauj tieši iestatītthisvērtību funkcijai.call(thisArg, arg1, arg2, ...): izsauc funkciju, iestatotthisuzthisArgun argumentus atsevišķi.apply(thisArg, [argsArray]): izsauc funkciju, iestatotthisuzthisArgun argumentus kā masīvu.bind(thisArg): atgriež jaunu funkciju ar pastāvīgi saistītuthisvērtību.
const anotherObj = { value: 42 }; function showValue() { console.log(this.value); } showValue.call(anotherObj); // Izvadīs 42 -
Loku funkcijas (
=>): Loku funkcijas nav savasthis.thisvērtība mantojas no leksiskā konteksta, kurā tā tika definēta.const outerObj = { name: 'Ārējais', method: function() { const arrowFunc = () => { // this šeit mantojas no `method`, kas tiek izsaukts kā outerObj metode console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // Izvadīs 'Ārējais' const anotherArrowFunc = () => { // this šeit mantojas no globālā konteksta (vai `undefined` stingrā režīmā) console.log(this); }; anotherArrowFunc(); -
Notikumu apstrādātāji DOM: Lielākajā daļā gadījumu,
thisnotikumu apstrādātājā norāda uz DOM elementu, kurā notika notikums.// Piemērs pārlūkā const button = document.querySelector('button'); button.addEventListener('click', function() { // this === button console.log(this.tagName); });
Šo mehānismu izpratne ir kritiska, lai pareizi izmantotu this JavaScript.