Unknown
Unknown

Reputation: 257

how to create instances of a function in javascript?

Im trying to add an event listener to a object for example:

this.startLoading = function(){
     this.a.addEventListener("complete", this.loadingHandler()); this gives me an error
},

this.loadingHandler = function(){
    console.log("im doing something")
}

ERROR: "Uncaught Error: addListener only takes instances of Function. The listener for event "complete" is "undefined"

However if I put the loadingHandler() function inside the scope it works, for example:

this.startLoading = function(){
     var loadingHandler = function(){...}
     this.a.addEventListener("complete", loadingHandler()); // this works
 },

Im not sure what instances of a function means in that regard?

Upvotes: 0

Views: 80

Answers (1)

Pointy
Pointy

Reputation: 413866

When you put () after a reference to a function, that means to call the function, and the value of the expression is whatever the function returns.

Your second example, that you say works, actually will not work, and you'll get the same error if the "startLoading" function is called.

Because you probably need to retain the proper context (this), what you probably need is

this.a.addEventListener("complete", this.loadingHandler.bind(this));

The .bind() method returns a function (exactly what addEventListener requires) that in turn will invoke your function such that this has the value requested.

Upvotes: 1

Related Questions