2011-08-25 48 views
0

这是我的代码(在一个Firefox插件)Javascript错误,不承认功能...为什么?

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); 
} 

我得到的错误:

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

我在做什么错?

对不起,搞砸了格式化,但我删除了大部分的代码,以适应在这里,它使格式化全部扭曲。

回答

1

因为setTimeout回调将在全局上下文中执行。

您可以使用bind()[docs]方法来绑定回调所需的上下文和参数。

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

如果你不希望的this.this_version永久绑定作为第一个参数的当前值,然后将它从.bind()呼叫中除掉。

+0

现在我得到'错误:this.get_plugin_version未定义 源文件:铬://mf_monkey_project/content/overlay.js 行:476' – Ryan

+0

@Ryan:然后'this'在'something_something'功能不你期望的对象。 – user113716

+0

哎呀,不,我做了一个编辑,而不是复制你的代码..它的工作原理,但给我null作为版本号:(任何想法为什么? – Ryan

相关问题