2011-08-25 29 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