Nuo ko priklauso `this` vykdymo konteksto reikšmė JavaScript?
sobes.tech AI
Atsakymas iš AI
„this“ reikšmė JavaScript priklauso nuo funkcijos kvietimo būdo. Pagrindiniai scenarijai:
-
Pasaulinis kontekstas: Funkcijų išorėje, griežto režimo (
'use strict') metu,thisyraundefined. Be griežto režimo — globalus objektas (windownaršyklėje,globalNode.js). -
Objekto metodo kvietimas:
thisnurodo į objektą, kuriam priklauso kviečiamas metodas.const obj = { prop: 'reikšmė', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Įprastas funkcijos kvietimas: Griežto režimo metu
thisyraundefined. Be griežto režimo — globalus objektas.function myFunction() { // griežto režimo metu this === undefined // be režimo this === window (naršyklėje) console.log(this); } myFunction(); -
Konstruktorius (
new): Naudojantnewsu konstruktoriaus funkcija,thisfunkcijos viduje nurodo į naują sukurtą objektą.function MyClass(name) { this.name = name; // this === naujas objektas } const instance = new MyClass('test'); // instance.name === 'test' -
Aiškus susiejimas (
call,apply,bind): Šie metodai leidžia aiškiai nustatytithisreikšmę funkcijai.call(thisArg, arg1, arg2, ...): kviečia funkciją, nustatydamasthisįthisArgir perduodamas argumentus atskirai.apply(thisArg, [argsArray]): kviečia funkciją, nustatydamasthisįthisArgir argumentus kaip masyvą.bind(thisArg): grąžina naują funkciją su nuolat susietuthisreikšme.
const anotherObj = { value: 42 }; function showValue() { console.log(this.value); } showValue.call(anotherObj); // Išveda 42 -
Strėlinės funkcijos (
=>): Strėlinės funkcijos neturi savothis.thisreikšmė paveldima iš leksinio konteksto, kuriame ji buvo apibrėžta.const outerObj = { name: 'Išorė', method: function() { const arrowFunc = () => { // this čia paveldima iš method, kuris kviečiamas kaip outerObj metodas console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // Išveda 'Išorė' const anotherArrowFunc = () => { // this čia paveldima iš globalinio konteksto (arba `undefined` griežto režimo) console.log(this); }; anotherArrowFunc(); -
DOM įvykių tvarkytojai: Daugeliu atvejų,
thisįvykių tvarkytojuose nurodo į DOM elementą, kuriame įvyko įvykis.// Pavyzdys naršyklėje const button = document.querySelector('button'); button.addEventListener('click', function() { // this === button console.log(this.tagName); });
Šių mechanizmų supratimas yra labai svarbus teisingam this naudojimui JavaScript'e.