在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实现。

下面就介绍两种实现方式:

1.window 对象实现 :

我们知道定义一个对象可以这样,window['System']={};  System['Web']={}   ;System.Web['UI']={};

其实这样就简单了,我们实现动态创建对象只需要拆分字符串创建对应的对象,代码如下:

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对象下面。

大家可以自己先写一个试试看,可以把代码贴到评论里面方便大家交流学习,下一篇我会贴出源码。

  

浅谈js命名空间管理的更多相关文章

  1. 浅谈JS面向对象

    浅谈JS面向对象 一 .什么是面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.注重代码的过程部分. 二.什么是面向对象 最先出现在管理学 ...

  2. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  3. 浅谈JS之AJAX

    0x00:什么是Ajax? Ajax是Asynchronous Javascript And Xml 的缩写(异步javascript及xml),Ajax是使用javascript在浏览器后台操作HT ...

  4. 浅谈JS中的闭包

    浅谈JS中的闭包 在介绍闭包之前,我先介绍点JS的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...

  5. 浅谈 js 正则字面量 与 new RegExp 执行效率

    原文:浅谈 js 正则字面量 与 new RegExp 执行效率 前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化 ...

  6. 浅谈 js 字符串之神奇的转义

    原文:浅谈 js 字符串之神奇的转义 字符串在js里是非常常用的,但是你真的了解它么?翻阅<MDN String>就可以了解它的常见用法了,开门见山的就让你了解了字符串是怎么回事. 'st ...

  7. 浅谈 js 正则之 test 方法

    原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. var re = /\d/; console. ...

  8. 浅谈 js 数字格式类型

    原文:浅谈 js 数字格式类型 很多人也许只知道 ,123.456,0xff 之类的数字格式.其实 js 格式还有很多数字格式类型,比如 1., .1 这样的,也有 .1e2 这样的. 可能有人说这是 ...

  9. 浅谈 js 语句块与标签

    原文:浅谈 js 语句块与标签 语句块是什么?其实就是用 {} 包裹的一些js代码而已,当然语句块不能独立作用域.可以详细参见这里<MDN block> 也许很多人第一印象 {} 不是对象 ...

随机推荐

  1. EF DI & MVC

    The Repository Pattern with EF Code First & Dependency Injection in ASP.NET MVC3 Ray_Liang, 5 Ju ...

  2. Android动画例子。

    例子一: 补间动画效果,从右进,从左出. ImageSwitcher mImageSwitcher = new ImageSwitcher(this); mImageSwitcher.setFacto ...

  3. MDM证书申请的流程

    MDM证书申请的流程 整个流程分为两部分:vendor,customer. 一.Vendor 1.成为一个 MDM Vendor 1) 首先你需要拥有一个 Apple Enterprise accou ...

  4. iOS开发-UI 从入门到精通(五)

    近日在做项目的时候,为了快捷适配屏幕采用了Storyboard,添加约束以后运行后发现一个问题(下面将以普通案例展示该问题);在4.7 甚至更大的屏幕下是没有问题的,如下图(4.7屏幕): 但是放到更 ...

  5. dede:field name='imgurls'不能二次使用的解决办法

    {dede:field name='imgurls' alt='图片输出区'}图片链接  [field:linkurl/]图片地址 [field:imgsrc/]{/dede:field} 这个标签不 ...

  6. UITableViewController和XML解析还有地图的简单结合

    然后我的代码就按照上面的这个顺序输出. #import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interfa ...

  7. [Erlang 0108] Elixir 入门

    Erlang Resources里面关于Elixir的资料越来越多,加上Joe Armstrong的这篇文章,对Elixir的兴趣也越来越浓厚,投入零散时间学习了一下.零零散散,测试代码写了一些,Ev ...

  8. 解决session阻塞的问题

    简介 对于数据库运维人员来说创建session或者查询时产生问题是常规情况,下面介绍一种很有效且不借助第三方工具的方式来解决类似问题. 最近开始接触运维工作,所以自己总结一些方案便于不懂数据库的同事解 ...

  9. mysql-Federated存储方式,远程表,相当于sql server的linked server

    MySQL中针对不同的功能需求提供了不同的存储引擎.所谓的存储引擎也就是MySQL下特定接口的具体实现. FEDERATED是其中一个专门针对远程数据库的实现.一般情况下在本地数据库中建表会在数据库目 ...

  10. IIS+域组策略+hosts:禁止访问指定网站

    一.简介 禁止访问网站可以通过多种方式实现,在网络设备上实现大概是性能最好的方式.本文在域服务器上实现该功能,优点是配置简单.可自定义跳转页面,缺点也很明显,遇到熟悉操作系统的用户,修改hosts文件 ...