Javascript Firefox扩展JSMs和命名空间ettiquite

Javascript Firefox扩展JSMs和命名空间ettiquite,javascript,firefox-addon,jsm,Javascript,Firefox Addon,Jsm,因此,在Firefox扩展中,建议您的扩展对象位于子对象中,如com.contoso.myExtension。这样,您就没有将任何对象放在全局名称空间中,而扩展通常不会出现在彼此的头发中。(至少在common browser.xul窗口中) 但据我所知,当模块本身在一个单独的名称空间中工作时,它导出的符号将最终位于导入它的任何代码的全局名称空间中。此外,扩展不可能是“好的”,而只尝试构建子对象;这些导出的符号只会打击任何已经存在的全局变量。此外,无法导出com.contoso.myExtensi

因此,在Firefox扩展中,建议您的扩展对象位于子对象中,如com.contoso.myExtension。这样,您就没有将任何对象放在全局名称空间中,而扩展通常不会出现在彼此的头发中。(至少在common browser.xul窗口中)

但据我所知,当模块本身在一个单独的名称空间中工作时,它导出的符号将最终位于导入它的任何代码的全局名称空间中。此外,扩展不可能是“好的”,而只尝试构建子对象;这些导出的符号只会打击任何已经存在的全局变量。此外,无法导出com.contoso.myExtension之类的符号。它只是一个简单的全局变量


那么,在使用JSMs时,有什么协议可以让您玩得更好呢?只需要创建很长的变量名,并希望它们不会冲突?

首先,我还没有看到一个真正的标准来处理这个问题。但我们肯定可以做得比长变量名好得多

对于存在于单独名称空间中的Javascript代码模块(可以这么说),您是正确的,但是当您导入它们时,您不必将它们导入全局名称空间。如果查看文档,您会发现可以导入到特定的作用域。也就是说,您根本不必污染全局名称空间

您可以将模块收集到
myExtension
命名空间中

var myExtension = {};
Components.utils.import("resource://.../module.jsm", myExtension);
将其封装在一个自执行函数中不会让任何变量泄漏到全局名称空间中,甚至
myExtension

(function(){
    var myExtension = {};
    Components.utils.import("resource://.../module.jsm", myExtension);
})();

顺便说一下,我喜欢新的jsm标签!令人惊叹的。我认为导入com.contoso.myExtension会很好。您只需在扩展的命名空间中获得更多对象。