How do i add an event handler inside a class with a class-method as the callback ???
<div id="test">move over here</div>
<script>
oClass = new CClass();
function CClass()
{
this.m_s = "hello :-/";
this.OnEvent = OnEvent;
with(this)
{
var r = document.getElementById("test");
r.addEventListener('mouseover', this.OnEvent); // this does NOT work :-/
}
function OnEvent()
{
alert(this); // this will be the HTML div-element
alert(this.m_s); // will be undefined :-()
}
}
</script>
Yes i know some quirks to make it work but what would be the intended way when these event handlers were introduced ??? I again have the bitter feeling, that no-one truly lives oop :-(
Here for you to play: https://jsfiddle.net/sepfsvyo/1/
The
this
inside the event listener callback will be the element that fired the event. If you want thethis
to be the instance of your class, then either:Bind the function to the class instance:
Using
Function.prototype.bind
, will create a new function that itsthis
value will always be what you specify it to be (the class instance):Wrap the function inside an anounimous function:
or use an arrow function (so no need for
that
):Note: As mentioned in a comment bellow, both of the above methods pass a different function to
addEventListener
(the one withbind
create a new function, and the anounimous function is obviously!== this.OnEvent
). If you are going to remove the event listener later, you'll have to store a reference to the function:or:
then you can remove the event listener like: