views:

84

answers:

2

I have following situation. In a constructor of a pseudo class I attach a click event to an element. When the event is triggered I would like to refer from the callback function to the object where the event was set.

Code of the pseudo class constructor

function MyClass(){
  this.myClassAttribute = "A class attribute";

  // here `this` refers to the object

  $("span").click(function(){
    // here `this` refer to a matched element, i.e. "span"
    // How to get the value of `myClassAttribute`?
  });

}

How to refer to the object without an global variable?

+6  A: 

In Javascript an anonymous function is able to reference all variables that existed at the scope of the function's creation. Since this gets reassigned in the callback function, you can create a local variable to store it before you enter the callback.

function MyClass(){
  this.myClassAttribute = "A class attribute";
  var myClass = this;

  $("span").click(function(){
    myClass.myClassAttribute = "hello";
  });

}
Kai
Your click handler function is a closure, they are a powerful part of javascript http://www.google.com/search?q=javascript+closures
jayrdub
+2  A: 

This is better documented in the jQuery API. jQuery Bind

$.click is just a shortcut for $.bind('click', /no data/, callback)

$('span').bind('click', { parentObj: this }, function(e) {
  var parentObj = e.data.parentObj;
  // the rest of your code goes here
}

I hope this helps!

Stephen Delano