js命名空间使用方法_如何写js命名空间
2014-06-14 15:18:42 By: shinyuu
在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的留言板)
感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛
小呆 2014-04-07 18:18:30 1 评 | 回复
有例子吗?楼主。