在定义 JS module 时避免 namespace 污染

所谓 JS Module 就是可以被其他程序,例如HTML 使用的 JS 集合。很多 JS 库都是用单独的.js文件来发布自己的功能,这就是module的方式。
module 创建时最常见的问题就是namespace污染,也就是在被应用时使用的名字可能会与其他的变量有冲突。如,一个module定义为 hello,那么如果在被引用的上下文中还存在一个 hello 变量,这就产生了冲突,应该比较好理解。那么如何解决这个问题呢。最简单的是使用更加独特的名字,这个也会承担一些风险,毕竟独特的绝对性有多大,很难估计。所以,人们就使用类似 Java 类包的命名方式,在文件系统中,使用层级目录存放 JS 文件,也就是 module,然后再定义的使用,使用层级的定义方式,这样可以很有效的解决这个问题。如下面的例子:

如果要定义一个层级为 js.dada.dada 的module,首先在文件系统中要手工创建这样的一个目录,比较好理解。然后就要定义这个 dada.js 文件,关于命名的片段为:

var js = {} //使用 var  定义最顶级的命名,然后依次向下进行定义。最后,以完整的命名方式进行函数功能的定义
js.dada={}
js.dada.dada={}

js.dada.dada.Circle  = function(){return 'Circle'} //  dada.Circle  = function(){return 'Circle'}   是错误的定义方式。


在使用这个module时,script 语句也需要使用完整路径进行调用。例如:

var result = js.dada.dada.Circle();
posted @ 2011-05-06 09:58  跳刀的兔子  阅读(855)  评论(0编辑  收藏  举报