javascript: de this toewijzen met de apply en call methoden van de Function object

Inleiding tot 'this' in javascript

In JavaScript, vooral bij object-georiënteerd programmeren, is het belangrijk om te begrijpen wat de waarde van 'this' is binnen een functie of methode. 'this' verwijst naar het object waartegen de functie werd aangeroepen. Er zijn twee methoden van het Function object die je kunt gebruiken om 'this' expliciet te bepalen: apply en call. Deze methoden bieden de flexibiliteit om de context van 'this' te wijzigen.

Het concept van 'this'

Stel je voor dat je een functie hebt die een bepaalde actie uitvoert, maar je wilt dat die actie uitgevoerd wordt alsof hij deel uitmaakt van een ander object. Dat is precies wat apply en call mogelijk maken. Ze stellen je in staat om de waarde van 'this' binnen de functie aan te passen, waardoor je code flexibeler en herbruikbaarder wordt. Het begrijpen van 'this' is cruciaal voor het effectief gebruiken van JavaScript's object-georiënteerde mogelijkheden.

Voorbeeld: auto en persoon

Laten we kijken naar een voorbeeld met een Auto en een Persoon object. Beide objecten hebben een getName methode die hun naam weergeeft. Wanneer je getName direct aanroept op een instantie van Auto of Persoon, verwijst 'this' natuurlijk naar dat object zelf. Het is de basisfunctionaliteit die we gewend zijn, maar de kracht zit in de mogelijkheid om 'this' te manipuleren.

De apply() methode

De apply() methode roept een functie aan met een gegeven 'this' waarde en een array van argumenten. De syntax is: functie.apply(thisWaarde, [argumenten]). De 'thisWaarde' is het object waarnaar 'this' binnen de functie moet verwijzen. De [argumenten] is een array met de argumenten die aan de functie moeten worden doorgegeven. Deze is handig als je een variabele aantal argumenten hebt.

De call() methode

De call() methode roept een functie aan met een gegeven 'this' waarde en een lijst van argumenten die direct worden doorgegeven. De syntax is: functie.call(thisWaarde, argument1, argument2, .). Net als apply(), stelt call() je in staat om de context van 'this' te bepalen. Het verschil is de manier waarop argumenten worden doorgegeven: direct in de aanroep, in plaats van in een array.

Voorbeeld: test1 en test2

In het oorspronkelijke voorbeeld definieerden we een test1 en test2 methode op het Persoon object. Deze methoden roepen de getName methode van het Auto object aan, maar met 'this' ingesteld op het Persoon object. Dit resulteert in een verrassend resultaat: de getName methode van de Auto gebruikt de naam van de Persoon. Dit illustreert de impact van het aanpassen van de 'this' context met apply en call. Hoewel het voorbeeld misschien niet direct praktisch is, laat het de werking van deze methoden goed zien.

Verschil tussen apply en call

Het belangrijkste verschil tussen apply en call is de manier waarop argumenten worden doorgegeven. apply accepteert een array van argumenten, terwijl call individuele argumenten verwacht. Beide methoden dienen hetzelfde doel: de waarde van 'this' binnen een functie aanpassen. De keuze tussen apply en call hangt vaak af van de specifieke situatie en de manier waarop de argumenten beschikbaar zijn.