作者 : zhanhailiang 日期 : 2012-10-24
在添加一个属性或者创建一个命名空间之前,最好是首先检查它是否已经存在,如下例:
if(typeof HWSL === "undefined") {
var HWSL = {};
}
//或者使用||的短路功能
var HWSL = HWSL || {};
但是这些附加的检查会迅速产生大量重复的代码。如果想定义HWSL.Custom.module2,需要构造三次检查,每次检查都要针对定义的一个对象或者属性。所以需要一个可以很方便地处理命名空间细节的可重用函数(称之为通用命名空间函数)。定为namespace()并加以使用:
// 使用命名空间函数
HWSL.namespace("HWSL.Custom.module2");
// 相当于如下代码
var HWSL = {
Custom : {
module2 : {}
}
};
接下来是一个命名空间函数的实现示例,这个实现是非破坏性的,即若已经存在一个命名空间,便不会再重新创建它。
var HWSL = HWSL || {};
// 使用方法
// 1 var module2 = HWSL.namespace("HWSL.Custom.module2");
// module2 === HWSL.Custom.module2; // true;
// 2 HWSL.namespace("HWSL.Custom.module51");
HWSL.namespace = function(nsString) {
var parts = nsString.split('.'),
parent = HWSL,
i;
// 剥离最前面的冗余的全局变量
if(parts[0] === "HWSL") {
parts = parts.slice(1);
}
for(i = 0; i < parts.length; i++) {
// 若它不存在,则创建一个属性
if(typeof parent[parts[i]] === "undefined") {
parent[parts[i]] = {};
}
parent = parent[parts[i]];
}
return parent;
};
//测试用例
//HWSL.namespace("HWSL.Custom.module2");
//console.log(HWSL.Custom);
//console.log(HWSL.Custom.module2);
//var module2 = HWSL.namespace("HWSL.Custom.module2");
//console.log(module2 === HWSL.Custom.module2); // 输出 true;
//HWSL.namespace("Custom.module51"); // 忽略前面的HWSL
//console.log(HWSL.Custom.module51);
分享到:
相关推荐
javascript简单实现命名空间效果.docx
用源生的javascript实现一个命名空间的组件类,可以一次创建多个命名空间。
JavaScript创建命名空间(namespace)通过自定义函数进行类型判断、数组遍历、函数执行等相关操作来实现命名空间的功能,需要的朋友可以参考一下
Javascript原生并不支持命名空间,需要变通来实现。 在我们创建一个JavaScript库时,命名空间就显得举足轻重了,我们可以将组成这个JavaScript库的零散的JavaScript文件(*.js)封装在命名空间中,而无须定义全局的...
主要介绍了javascript实现相同事件名称,不同命名空间的调用方法,涉及javascript命名空间及事件调用的技巧,需要的朋友可以参考下
在引入命名空间之前,一个令开发人员头疼的问题就是如何防止函数名/类名和其他人的冲突,在一个公司内部项目组之间可以通过命名预定(比如加前缀等)解决这个问题,但是把视线放到整个软件开发领域,在当今协作开发...
使用JavaScript实现命名空间就没有这么舒服了,Javascript只有函数作用域,什么块儿啊、神马文件啊统统都认为是一个命名空间的,有时候因为一些重名问题导致的错误让人莫名其妙,难以调试解决
主要介绍了JavaScript命名空间模式,结合实例形式分析了javascript命名空间模式的相关概念、原理、实现方法及操作注意事项,需要的朋友可以参考下
命名空间是通过为项目或库创建一个全局对象,然后将所有功能添加到该全局变量中。通过减少程序中全局变量的数量,实现单全局变量,从而在具有大量函数、对象和其他变量的情况下不会造成全局污染,同时也避免了命名...
介绍了js命名空间的另一种简单实现方法,有需要的朋友可以参考一下
js-qname 简单的QName(命名空间URI +本地名称)JavaScript的对象实现
6.javascript 命名空间 Oject-Oriented 1.JavaScript Expressive 2. Interfaces 3.Introduction 4. Inheritance 5.AOP Jquery [jQuery][9] [jQuery架构设计与实现][10] [jQuery选择器库][11] [zepto][12] 1....
为了避免变量之间的覆盖与冲突,可以生成命名空间,命名空间是一种特殊的前缀,在js中,通过{ }对象实现。 在不同的匿名函数中,根据功能声明一个不同的命名空间,每个匿名函数中GLOBAL对象的属性都不直接挂在GLOBAL...
为此,在封装javascript组件库的时候,请使用命名空间来避免冲突。 将所有的方法和变量都要按包名类名的方式来写。 (这个时候写代码的感觉和封装java的util方法一样方便,呵呵) 由此,我的js库按如下方式封装。
起因将代码组织到类中的一个重要原因是让代码更加“模块化”,可以在很多不同的场景中实现代码的重用。但类不是唯一的模块化代码的方式。...实际上,可以将这个函数作用域用做模块的命名空间(模块函数) 一旦将模块
更新添加了自动驼峰命名,您不再需要将带有连字符的模块显式映射到有效的 var 名称,因为 idefine 会在这些情况下自动将命名空间进行驼峰命名。 例如cookie-parser导入cookieParser 。 如果您喜欢{ cp : 'cookie-...