Waarvan afhankelijk is de waarde van de uitvoeringscontext van `this` in JavaScript?
sobes.tech AI
Antwoord van AI
De waarde van this in JavaScript hangt af van hoe de functie wordt aangeroepen. De belangrijkste scenario's:
-
Globale context: Buiten functies in strict mode (
'use strict') isthisundefined. Zonder strict mode is het het globale object (windowin de browser,globalin Node.js). -
Aanroep van een objectmethode:
thiswijst naar het object waartoe de aangeroepen methode behoort.const obj = { prop: 'waarde', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Normale functieaanroep: In strict mode is
thisundefined. Zonder strict mode is het het globale object.function myFunction() { // in strict mode this === undefined // zonder strict mode this === window (in de browser) console.log(this); } myFunction(); -
Constructor (
new): Bij gebruik van denewoperator met een constructorfunctie, verwijstthisbinnen de functie naar het nieuw gemaakte object.function MyClass(name) { this.name = name; // this === nieuw object } const instance = new MyClass('test'); // instance.name === 'test' -
Expliciete binding (
call,apply,bind): De methodencall,applyenbindstellen je in staat om expliciet de waarde vanthisvoor een functie in te stellen.call(thisArg, arg1, arg2, ...): Roept de functie aan, steltthisin opthisArgen geeft de argumenten apart door.apply(thisArg, [argsArray]): Roept de functie aan, steltthisin opthisArgen geeft de argumenten als array door.bind(thisArg): Geeft een nieuwe functie terug metthispermanent gebonden.
const anotherObj = { value: 42 }; function showValue() { console.log(this.value); } showValue.call(anotherObj); // Toont 42 -
Pijlfuncties (
=>): Pijlfuncties hebben geen eigenthis. De waarde vanthisbinnen een pijlfunctie erft van de lexicale context waarin deze is gedefinieerd.const outerObj = { name: 'Outer', method: function() { const arrowFunc = () => { // this erft van method, die wordt aangeroepen als methode van outerObj console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // Toont 'Outer' const anotherArrowFunc = () => { // this erft van de globale context (of undefined in strict mode) console.log(this); }; anotherArrowFunc(); -
DOM event handlers: In de meeste gevallen verwijst
thisin een event handler naar het DOM-element waarop het event plaatsvindt.// Voorbeeld in de browser const button = document.querySelector('button'); button.addEventListener('click', function() { // this === button console.log(this.tagName); });
Het begrijpen van deze mechanismen is cruciaal voor het correct gebruik van this in JavaScript.