资讯专栏INFORMATION COLUMN

JavaScript命名空间

Forelax / 2500人阅读

摘要:什么是命名空间命名空间英语表示标识符的可见范围。通用命名空间函数语言的与语法中,没有内置命名空间,但这种特征非常容易实现。添加到命名空间的属性可能已经存在,所以再添加属性或者创建命名空间之间,我们应该先检查命名空间是否存在。

什么是命名空间

命名空间(英语: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");

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85749.html

相关文章

  • 【译】JavaScript 命名空间

    摘要:前缀命名空间如果命名空间的目的是避免冲突的话。语言程序经常使用前缀命名空间。我认为前缀命名空间是中最清楚明白的命名空间系统。对象命名空间的一个问题是它会导致与面向对象消息传递混淆。嵌套命名空间的幻觉在中也存在。 原文链接:《JavaScript Namespacing》译文原链:【译】JavaScript 命名空间 JavaScript 中有很多可以给你的对象安全分配命名空间的方法。这...

    liujs 评论0 收藏0
  • 【译】JavaScript 中的命名空间

    摘要:原文链接译文原链译中的命名空间全局变量应该由有系统范围相关性的对象们保留,并且它们的命名应该避免含糊并尽量减少命名冲突的风险。其他的考虑我希望避免命名空间嵌套。因为并没有正式的命名空间结构,所以有很多自然形成的方法。 原文链接: Namespacing in JavaScript译文原链: 【译】JavaScript 中的命名空间 全局变量应该由有系统范围相关性的对象们保留,并且它们的...

    Crazy_Coder 评论0 收藏0
  • javaScript命名空间的实现

    摘要:命名空间的实现在全局管理命名空间,可以把命名挂在在这个全局对象上,来实现命名空间的整合和通信。按照约定的命名规范,将本变量注册到全局大型项目中,变量对象会出现多层级的结构,如一层一层注册。 大型项目中-javaScript如何解决命名冲突 要解决命名冲突,即必须保证,本模块的变量不会被其他模块污染,为了保证命名空间的整洁,希望能够在全局把这些变量用一种规范的方式组织起来。 命名空间的实...

    xioqua 评论0 收藏0
  • JavaScript DOM2和DOM3——“DOM的变化”的注意要点

    摘要:和级分为许多模块,分别描述了的某个非常具体的子集。这些模块主要有核心视图事件样式遍历和范围以及。另外还有方法和方法框架的变化框架和内嵌框架分别用和表示,它们在级中都有一个新属性这个属性包含一个指针,指向表示框架内容的文档对象。 DOM2和DOM3级分为许多模块,分别描述了DOM的某个非常具体的子集。这些模块主要有核心(Core)、视图(Views)、事件(Events)、样式(Styl...

    骞讳护 评论0 收藏0
  • js作用域与命名空间

    摘要:全局变量函数内的局部作用域和是函数内的局部变量,而对的赋值将会覆盖全局作用域内的同名变量。命名空间只有一个全局作用域导致的常见错误是命名冲突。另外两种方式结论推荐使用匿名包装器译者注也就是自执行的匿名函数来创建命名空间。 尽管 JavaScript 支持一对花括号创建的代码段,但是并不支持块级作用域; 而仅仅支持 函数作用域。 function test() { // 一个作用域 ...

    antyiwei 评论0 收藏0

发表评论

0条评论

Forelax

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<