• js命名空间


    在小规模的脚本开发中,有时候并不值得去引用命名空间,因为会带来某种程度的复杂性;但是当在同一个网页里引入10多个js文件之后,各js中的同 名函数就很容易冲突了。比如xxx库里写了个addCssStyle方法,yyy类库里也写了个addCssStyle方法,而这两个方法的具体实现又有 一定差别。那么同时引用这两个组件的时候,函数冲突之后导致页面效果发生变化,调试和修改都是非常痛苦的,如果为了避免冲突,而放弃引用一些优秀的组件, 那更是让人郁闷的事情。为此,在封装javascript组件库的时候,请使用命名空间来避免冲突。将所有的方法和变量都要按包名,类名的方式来写。(这个时候写代码的感觉和封装java的util方法一样方便,呵呵)

    所以,请记住:请为你封装的JavaScript库加上命名空间以提高代码重用性。

    但是JavaScript原生并不支持命名空间,需要变通来实现。

    JavaScript中,所有的对象(或者称类型,例如Boolean,Array,Function)都可以认为是一个关联数组。关联数组中的对象可以 使用点(.)进行引用,这样我们可以利用关联数组变相地实现命名空间。首先声明一个关联数组作为根,因为页面声明的对象都是window这个变量的成员, 所以一般命名空间的实现都以window为根。当向window申请a.b.c的命名空间时,首先在window中查看是否存在a这个成员,如果没有则在 window下新建一个名为a的空关联数组,如果已经存在a,则继续在window.a中查看b是否存在,以此类推。下面分别是Atlas和YUI中的实 现方法。

    //Atlas命名空间的实现方法

    Function.registerNamespace =function(namespacePath){

    //以window为根

    var rootObject =window;

    //对命名空间路径拆分成数组

    var namespaceParts =namespacePath.split('.');

    for (var i =0;i <namespaceParts.length;i++) {

        var currentPart =namespaceParts[i];

        //如果当前命名空间下不存在,则新建一个Object对象,等效于一个关联数组。

        if (!rootObject[currentPart])      {

           rootObject[currentPart]=new Object();

        }

        rootObject =rootObject[currentPart];

    }

    }

    以上JS命名空间的方式似乎已经过时了,那我们再来看看利用js对象字面量的方式来实现js的命名空间。

    var school = {
            addClass:function(classnum){
                console.log(classnum);
            },
            addStudent:function(stuId){
                console.log(stuId);
            }
    }
    school.addClass("2");

    以上就是采用的对象字面量的方法

  • 相关阅读:
    IDE警告信息不应该被忽略
    C#委托使用:多播 ,向委托注册多个方法
    C# random生成随机数全部一样
    使用dynamic动态设置属性值与反射设置属性值性能对比
    git基本使用
    sql server多数据库查询 远程数据库查询
    C# mvc统一通道使用过滤器
    拼凑json的实例
    java常考小程序
    几个触发器的实例
  • 原文地址:https://www.cnblogs.com/alisayuan/p/4735791.html
Copyright © 2020-2023  润新知