首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firefox扩展JSM和名称空间等

Firefox扩展JSM和名称空间等
EN

Stack Overflow用户
提问于 2011-05-01 00:37:59
回答 1查看 290关注 0票数 2

因此,在Firefox扩展中,鼓励扩展的对象驻留在像com.contoso.myExtension这样的子对象中。这样,您就没有在全局名称空间中放置任何对象,并且扩展通常不会影响到彼此。(至少在公共browser.xul窗口中)

但据我对Javascript code modules (JSMs)的理解,虽然模块本身在一个单独的名称空间中工作,但它导出的符号最终将在任何导入它的代码的全局名称空间中。此外,扩展不可能是“很好的”,并且只尝试构建子对象;这些导出的符号只会破坏已经存在的任何全局变量。同样,你也不能导出像com.contoso.myExtension这样的符号。它只是一个简单的全局变量。

那么,在使用JSM时,扮演友好角色的协议是什么呢?只是让变量名变得很长,希望它们不会发生冲突?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-01 05:36:28

首先,我还没有看到如何处理这个问题的真正标准。但我们绝对可以做得更好,而不仅仅是长的变量名……

您关于Javascript Code Modules位于一个单独的名称空间(可以这么说)的说法是正确的,但是当您导入它们时,您不必将它们导入到全局名称空间中。如果您查看Components.utils.import文档,您会发现您可以导入到特定的作用域。也就是说,在所有中,您不必污染全局名称空间。

您可以将模块收集到一个myExtension名称空间中。

代码语言:javascript
复制
var myExtension = {};
Components.utils.import("resource://.../module.jsm", myExtension);

将其封装在自执行函数中不会让任何变量泄漏到全局名称空间中,甚至myExtension也不会!

代码语言:javascript
复制
(function(){
    var myExtension = {};
    Components.utils.import("resource://.../module.jsm", myExtension);
})();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5843169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档