动态加载的JavaScript文件中的内容如何放在命名空间下?

10

动态插入 JavaScript 文件是否可以命名空间化?

我知道可以通过创建 script 标签并将其插入到 DOM 中来动态包含 JavaScript 文件,但是这个包含的文件可以被命名空间化吗?所以,如果文件有一个叫做 bar 的函数,我希望通过一个命名空间 foo 来访问它:即foo.bar()

2个回答

6

是的,CommonJS模块/1.1只指定了一种方法。

我只在Node.js服务器端使用过它,但我相信有其他库被创建为与浏览器一起工作并符合CommonJS规范。请注意,服务器/浏览器有多个模块规范(尚未深入研究)。

模块的编写方式与任何其他javascript代码相同,唯一的区别是您可以导出要暴露的内容:

module.exports.bar = Bar;

function Bar() {
 // code
}

而且用法:

var foo = require('mymodule');

foo.bar();

实际上,整个代码被包装在另一个函数中,并且输出为其属性。

此外,Michael Bolin 在他的 JSConf 演讲中谈到了类似问题的 'with' 关键字。


1
CurlJS、requireJS 支持 AMD 模块,在浏览器中可以直接使用。像 browserify 这样的工具允许您创建 Modules/1.1 bundles。 - Raynos
1
我还没有开始尝试这个。不过,我有一个问题,每个包含的js文件是否需要导出属性以供require使用?如果是这样,那么在包含第三方js文件时如何实现命名空间? - William Niu
那么,如果不使用库,你该如何实现它? - Cypher

0
如果你的意思是在动态加载文件时向所有定义的内容添加命名空间,而不修改文件本身,那么答案是否定的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接