Ryan
Ryan

Reputation: 10039

Javascript error, not recognizing function... why?

This is my code (in a firefox addon)

this.something_something = function (the_actual_url) {
    this.this_version = null;
    try {
        // Firefox 4 and later; Mozilla 2 and later
        Components.utils.import("resource://gre/modules/AddonManager.jsm");
        AddonManager.getAddonByID("[email protected]", function (addon) {
            this_version = addon.version;
        });
    }
    catch (ex) {
        // Firefox 3.6 and before; Mozilla 1.9.2 and before
        var em = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
        var addon = em.getItemForID("[email protected]");
        this_version = addon.version;
    }


    this.timervar = setTimeout(function () {
        this.get_plugin_version(this.this_version);
    }, 2000);
}

this.get_plugin_version = function (blah) {
    alert("aa:" + blah);
}

I get the error:

Error: this.get_plugin_version is not a function Source File: chrome://mf_monkey_project/content/overlay.js Line: 476

What am I doing wrong?

Sorry about the screwed up formatting, but i deleted the bulk of the code to fit here and it made the formatting all screwy.

Upvotes: 0

Views: 218

Answers (1)

user113716
user113716

Reputation: 322452

Because the setTimeout callback will be executed in the global context.

You can use the bind()[docs] method to bind the desired context and argument for the callback.

this.timervar=setTimeout( this.get_plugin_version.bind(this, this.this_version),
                          2000 );

If you don't want the current value of this.this_version permanently bound as the first argument, then remove it from the .bind() call.

Upvotes: 1

Related Questions