在java中,为了防止命名冲突和模块式开发,会有个一个import 关键字来进行导包。

  在js中为了达到同样的效果,我们也通过给其自定义一个“包”的概念。

  直接上代码:

  首先有个LC.js文件:

  

//LC.js

var LC = LC || {};

LC.namespace = function(namespace) {
var nsparts = namespace.split(".");
var parent = window; if (nsparts[0] === "LC") {
nsparts = nsparts.slice(1);
parent = LC;
} for (var i = 0; i < nsparts.length; i++) {
var partname = nsparts[i];
if (typeof parent[partname] === "undefined") {
parent[partname] = {};
} parent = parent[partname];
} return parent;
}; // alias namespace
LC.ns = LC.namespace;

  设计思路:将命名空间,即”包“名通过参数传递到此方法中,然后将这个”包名“通过字符串解析,将其注册到window对象中,来充当window对象的属性,

通过一种类似递归的方式,来处理子包。

  使用的方法:

    

//Test.js
LC.ns("app.admin").test = (function() { function init() {
alert("init")
} function doSomething() {
alert("doSomething");
} return {
init : init,
doSomething : doSomething };
 })();

在页面调用Test.js 即需要引入这两个文件,调用某个方法:

<script >
app.admin.test.init();
app.admin.test.doSomething(); </script>

  这样就通过这种命名空间的方式来减少js方法命名的重复了。

04-19 14:02
查看更多