JavaScript命名空间

什么是命名空间

命名空间(英语:Namespace)表示标识符(identifier)的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。(维基百科

命名空间的作用

当一个工程很大时,既有自身的代码,又有引用的外部库,当自身库和外部库中的对象重名时,没有命名空间将无法区分他们。

通用命名空间函数

JavaScript语言的与语法中,没有内置命名空间,但这种特征非常容易实现。添加到命名空间的属性可能已经存在,所以再添加属性或者创建命名空间之间,我们应该先检查命名空间是否存在。

var FN = FN || {};

如果定义FN.fn1.fn2,则:

var FN = FN || {};
var FN.fn1 = FN.fn1 || {};
var FN.fn1.fn2 = FN.fn1.fn2 || {};

可以看出每创建一个命名空间或者添加属性,都需要对对象或属性做附加检查,产生大量重复代码,这违背了DRY原则,也是产生命名空间函数的原因。我们希望通过以下命名空间函数调用产生以上效果:

FN.namespace("FN.fn1.fn2")

于是我们可以做以下实现:

    var FN = FN || {};
        FN.namespace = function(ns_string){
            var parts = ns_string.split("."),
            parent = FN,
            i;
            if(parts[0] === "FN"){
                left = parts.slice(1);
            }   
            for(i = 0 ;i < left.length; i += 1){            
                if(typeof parent[left[i]] === "undefined"{
                    parent[left[i]] = {};
                }
                parent = parent[left[i]] ;
            }
        }
     x = FN.namespace("FN.fn1.fn2");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值