因此,在Firefox扩展中,鼓励扩展的对象驻留在像com.contoso.myExtension这样的子对象中。这样,您就没有在全局名称空间中放置任何对象,并且扩展通常不会影响到彼此。(至少在公共browser.xul窗口中)
但据我对Javascript code modules (JSMs)的理解,虽然模块本身在一个单独的名称空间中工作,但它导出的符号最终将在任何导入它的代码的全局名称空间中。此外,扩展不可能是“很好的”,并且只尝试构建子对象;这些导出的符号只会破坏已经存在的任何全局变量。同样,你也不能导出像com.contoso.myExtension这样的符号。它只是一个简单的全局变量。
那么,在使用JSM时,扮演友好角色的协议是什么呢?只是让变量名变得很长,希望它们不会发生冲突?
发布于 2011-05-01 05:36:28
首先,我还没有看到如何处理这个问题的真正标准。但我们绝对可以做得更好,而不仅仅是长的变量名……
您关于Javascript Code Modules位于一个单独的名称空间(可以这么说)的说法是正确的,但是当您导入它们时,您不必将它们导入到全局名称空间中。如果您查看Components.utils.import文档,您会发现您可以导入到特定的作用域。也就是说,在所有中,您不必污染全局名称空间。
您可以将模块收集到一个myExtension名称空间中。
var myExtension = {};
Components.utils.import("resource://.../module.jsm", myExtension);将其封装在自执行函数中不会让任何变量泄漏到全局名称空间中,甚至myExtension也不会!
(function(){
var myExtension = {};
Components.utils.import("resource://.../module.jsm", myExtension);
})();https://stackoverflow.com/questions/5843169
复制相似问题