开发者

this in event handlers for another object

开发者 https://www.devze.com 2022-12-17 09:20 出处:网络
Class A (mine) implements event handlers for class B (3rd party). Within these event handlers, I would like to access class A\'s properties.

Class A (mine) implements event handlers for class B (3rd party). Within these event handlers, I would like to access class A's properties.

Using this in class A's handlers does not work because it references class B's scope.

Global variables seem like the only option. Am I missing a better alternat开发者_JAVA百科ive?


Create a self or that variable, which holds a reference to this. Something like this:

var ClassA = function () {
    var self = this;

    this.MyProperty1 = 3;
    self.MyProperty2 = "hello world";

    var ClassB_EventHandler = function () {
        self.MyProperty1;
        self.MyProperty2;
    }

}

You can use this and self interchangeably in ClassA's scope. In the ClassB event handler, you'll be required to use self to reference ClassA properties.


Another solution is to bind your event handlers to your object!

You first need the add the bind method to any function object. Use this code:

Function.prototype.bind = function(scope) {
  var func = this;

  return function() {
    return func.apply(scope, arguments);
  }
}

Now you can register your class B event handlers to your class A methods this way:

var a = new A();
var b = new B();

b.registerEvent(a.eventHandlerMethod.bind(a));

This way any references to this within the code of A.eventHandlerMethod will point to object a.

If you need a deeper understanding of this stuff you can read this great article: http://www.alistapart.com/articles/getoutbindingsituations/

Another article: http://alternateidea.com/blog/articles/2007/7/18/javascript-scope-and-binding

0

精彩评论

暂无评论...
验证码 换一张
取 消