Take the 2-minute tour ×

So I have some javascript class and in one method I use jQuery to bind function to click event. And within this function I need to call other methods of this class. In usual js function I did it through "this.method_name()", but here, I guess, jQuery redefines "this" pointer.

share|improve this question
Perhaps it would help if you pasted a short code snippet. –  Justin Ethier Jul 29 '10 at 16:49

2 Answers 2

up vote 6 down vote accepted

jQuery doesn't redefine the this pointer, but that's how JavaScript functions work in general. Store a reference to the this pointer under a different name, and use that.

var self = this;
$("selector").click(function() {

See this answer for more approaches.

share|improve this answer
The link pointed to a wrong answer. Updated –  Anurag Jul 29 '10 at 16:52
Oh wow, thx, works. –  Tyth Jul 29 '10 at 17:19
@Tramp - you're welcome. But note that this is still a hacky approach. Instead use jQuery.proxy, or even better the bind method that is now included in the standard. If it's not available in some browser, it's easy to define one - stackoverflow.com/questions/3018943/… –  Anurag Jul 29 '10 at 17:29
Maybe this the "best approach" but I think its the most readable and less code. –  John Magnolia Dec 8 '12 at 13:12

There are a few different ways to do this.

Anurag has a perfect example of one.

Two other ways are the jQuery Proxy class (Mentioned in other answers) and the 'apply' function

Now lets create an object with click events:

var MyObj = function(){

this.property1 = "StringProp";

// jQuery Proxy Function

  //Will alert "StringProp"
// set the 'this' object in the function to the MyObj instance


//Apply Function
//args are optional
this.clickFunction = function(arg1){

$(".selector").click(this.clickFunction.apply(this,"this is optional"));

share|improve this answer

Your Answer


