Hello people I was refactoring some code and couldn’t figure a way to reuse the ‘this’:
a/ Code I have
someElement.addEventListener('click', function (event){ if( this.nextSibling.classList.contains('expanded') ){ event.target.closest('.hello').getElementsByClassName('expanded')[0].classList.remove('expanded') } });
b/ I want to move the function to another file and export it as:
export function doStuff(){ if( this.nextSibling.classList.contains('expanded') ){ event.target.closest('.hello').getElementsByClassName('expanded')[0].classList.remove('expanded') } }
and use it like:
import {doStuff} from 'somePath' someElement.addEventListener('click', doStuff)
but ‘this’ is undefined.. how do I bind it?
Advertisement
Answer
Pass this
as parameter to function (and also decouple from event
too):
someElement.addEventListener('click', function (event){ doStuff(this, event.target); }); export function doStuff(element, target){ if(element.nextSibling.classList.contains('expanded') ){ target.closest('.hello').getElementsByClassName('expanded')[0].classList.remove('expanded') } }