`
iwebcode
  • 浏览: 2009596 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

JS实现命名空间

 
阅读更多
作者 : 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简单实现命名空间效果.docx

    自定义命名空间组件

    用源生的javascript实现一个命名空间的组件类,可以一次创建多个命名空间。

    JavaScript创建命名空间(namespace)的最简实现

    JavaScript创建命名空间(namespace)通过自定义函数进行类型判断、数组遍历、函数执行等相关操作来实现命名空间的功能,需要的朋友可以参考一下

    javascript简单实现命名空间效果

    Javascript原生并不支持命名空间,需要变通来实现。 在我们创建一个JavaScript库时,命名空间就显得举足轻重了,我们可以将组成这个JavaScript库的零散的JavaScript文件(*.js)封装在命名空间中,而无须定义全局的...

    javascript实现相同事件名称,不同命名空间的调用方法

    主要介绍了javascript实现相同事件名称,不同命名空间的调用方法,涉及javascript命名空间及事件调用的技巧,需要的朋友可以参考下

    在JavaScript中实现命名空间

    在引入命名空间之前,一个令开发人员头疼的问题就是如何防止函数名/类名和其他人的冲突,在一个公司内部项目组之间可以通过命名预定(比如加前缀等)解决这个问题,但是把视线放到整个软件开发领域,在当今协作开发...

    JavaScript 命名空间 使用介绍

    使用JavaScript实现命名空间就没有这么舒服了,Javascript只有函数作用域,什么块儿啊、神马文件啊统统都认为是一个命名空间的,有时候因为一些重名问题导致的错误让人莫名其妙,难以调试解决

    JavaScript命名空间模式实例详解

    主要介绍了JavaScript命名空间模式,结合实例形式分析了javascript命名空间模式的相关概念、原理、实现方法及操作注意事项,需要的朋友可以参考下

    Javascript 命名空间模式

    命名空间是通过为项目或库创建一个全局对象,然后将所有功能添加到该全局变量中。通过减少程序中全局变量的数量,实现单全局变量,从而在具有大量函数、对象和其他变量的情况下不会造成全局污染,同时也避免了命名...

    JS命名空间的另一种实现

    介绍了js命名空间的另一种简单实现方法,有需要的朋友可以参考一下

    js-qname:简单的QName(命名空间URI +本地名称)JavaScript的对象实现

    js-qname 简单的QName(命名空间URI +本地名称)JavaScript的对象实现

    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不产生冲突避免全局变量的泛滥

    为了避免变量之间的覆盖与冲突,可以生成命名空间,命名空间是一种特殊的前缀,在js中,通过{ }对象实现。 在不同的匿名函数中,根据功能声明一个不同的命名空间,每个匿名函数中GLOBAL对象的属性都不直接挂在GLOBAL...

    javascript 命名空间以提高代码重用性

    为此,在封装javascript组件库的时候,请使用命名空间来避免冲突。 将所有的方法和变量都要按包名类名的方式来写。 (这个时候写代码的感觉和封装java的util方法一样方便,呵呵) 由此,我的js库按如下方式封装。

    JS模块与命名空间的介绍

    起因将代码组织到类中的一个重要原因是让代码更加“模块化”,可以在很多不同的场景中实现代码的重用。但类不是唯一的模块化代码的方式。...实际上,可以将这个函数作用域用做模块的命名空间(模块函数) 一旦将模块

    idefine:Nodejs 命名空间模块,干净地压缩你的模块需要声明

    更新添加了自动驼峰命名,您不再需要将带有连字符的模块显式映射到有效的 var 名称,因为 idefine 会在这些情况下自动将命名空间进行驼峰命名。 例如cookie-parser导入cookieParser 。 如果您喜欢{ cp : 'cookie-...

Global site tag (gtag.js) - Google Analytics