views:

47

answers:

1
MyObj = 
{
    ajax: null,
    init: function()
    {
        this.ajax = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"]
           .createInstance();
        this.ajax.onload = function()
        {
            return function() {this.onload.apply(this, [null]);}
        };
    },
    onload: function ()
    {
        Reader.log("I really hope I can use `this.ajax` here");
    }
}

isn't it correct way to bind onload to MyObj? For some reason onload never called. However if I avoid binding and just put this.ajax.onload = this.onload then onload invoked. How to get binding work?

+1  A: 

and I will answer myself...

I should have called the function

var me = this;

this.ajax.onload = (function()
        {
            return function() {me.onload.apply(me, [null]);}
        })();
Michael
Why the extra function wrapper there? this.ajax.onload = function() {me.onload.apply(me, [null]);}
Joshua
@ Joshua: You are right, that was unnecessary and it worked even without it.
Michael