this in event handlers for another object

后端 未结 2 782
迷失自我
迷失自我 2020-12-21 17:01

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 c

相关标签:
2条回答
  • 2020-12-21 17:26

    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.

    0 讨论(0)
  • 2020-12-21 17:27

    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 讨论(0)
提交回复
热议问题