js命名空间使用方法_如何写js命名空间
2014-06-14 15:18:42  By: dwtedx

在C# 和 Java里面我们如果想使用哪一个功能类就要引用相应的命名空间、如C#里面有个System.Web.UI库、我们就要用using   System.Web.UI;,之后我们就可以用到ScriptManager这个类了、js里面其实是不纯在所谓的命名空间的、只是以对象字面量的方式展示出这种效果

js实现以上的效果通过以下代码

var System={
    Web:{
        UI:{
            ScriptManager:{}
        }
    }
};


这种方式感觉比较麻烦、还是习惯通过System.Web.UI这种方式来注册一个命名空间   NameSpace.Register("System.Web.UI")、我们只需要动态的创建对象就能实现、动态创建对象我们可以通过 两种方法:1.window 对象实现   2.eval实现、下面就介绍两种实现方式


我们知道定义一个对象可以这样、window['System']={};  System['Web']={}   ;System.Web['UI']={}、其实这样就简单了、我们实现动态创建对象只需要拆分字符串创建对应的对象

1.window 对象实现

var NameSpace = {
    Register: function () {
        // body...
        var arg = arguments[0];
        var arr = arg.split('.');
        var context = window;
        for (var i = 0; i < arr.length; i++) {
            var str = arr[i];
            if (!context[str]) {
                context[str] = {};
            }
            context = context[str];
        };
    }
}


2、eval实现

 var NameSpace = {
    Register: function () {
        // body...
        var arg = arguments[0];
        var arr = arg.split('.');
        var str = '';
        for (var i = 0; i < arr.length; i++) {
            str = i == 0 ? arr[i] : (str + '.' + arr[i]);
            var sval = "   if(typeof " + str + "=='undefined' ) { " + str + "= new Object(); } ";
            eval(sval) ;
        };
    }
}


这种是通过动态执行js字符串的方式、其实是将字符转换成代后执行而已、代码就没啥难度了、我们就可以直接通过 NameSpace.Register("System.Web.UI")注册对象、然后  System.Web.UI.dom={   method:function(){}}这样扩展一些方法

扩展想法:既然对象已经创建出来了、我又有了个想法、我觉得可以模仿模块化编程、进行进一步改造、可以扩展类似于以下的函数

define("dom.utility",  function(){   
    return {
        test :function(){}
    }
})


或是

define("dom.utility",{  test :function(){ 

})


调用的时候我们就直接用dom.utility.test()这种方式、实现这个define函数的思路:对象的属性拷贝、例如:将test属性加到dom.utility对象下面、大家可以自己先写一个试试看、可以把代码贴到评论里面方便大家交流学习、下一篇我会贴出源码

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

DD记账
top
+