在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. js(jquery)解决input元素的blur事件和其他非表单元素的click事件冲突的方法

    HTML结构:很简单,就一个input,一个div,能说明问题就OK了: <input type="text" value="默认值"><br ...

  2. DYN-B201 Dynamics CRM 云生产力解决方案与功能简介

    DYN-B201 Dynamics CRM 云生产力解决方案与功能简介 讲师:王健.林松涛Dynamics CRM 云产品正式落地中国,CRM 与 Azure.O365 深度整合无缝集成,带来无与伦比 ...

  3. 你的USB设备还安全吗?USB的安全性已从根本上被打破!

    前言: USB设备使用方便,但也可能被用来携带恶意软件.病毒,感染计算机系统.通过禁用自动播放功能.杀毒软件查杀.不定期的对设备进行格式化等操作可以确保它是干净的.但它存在的安全问题要比我们想象的更深 ...

  4. 元首的愤怒 SharePoint Apps

    柏林数据中心的服务器机架已经插满.CPU 100%.电力基础设施处在崩溃的边缘,但当元首决定迁移到 Office 365 的时候,将军们却告诉他那里没有 Farm Solution,5 年多的投资将付 ...

  5. EF UoC

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

  6. entity Framework codefirst Migrations

    一次数据迁移的记录 首先在vs工具里面使用打开程序包管理器控制台 在控制台上面选择程序集为数据访问层 注意配置生成app里面的连接字符串 在控制台输入 Enable-Migrations 会自动生成一 ...

  7. android四大组件(简单总结)

    activity 一个Activity通常就是一个单独的屏幕(窗口) Activity之间通过Intent进行通信 android应用中每一个Activity都必须要在AndroidManifest. ...

  8. IOS开发基础知识--碎片5

    二十三:addSubview和insertSubview 区别 addSubview 是将view加到所有层的最顶层 相当于将insertSubview的atIndex参数设置成view.subvie ...

  9. 几个常用的adb命令

    adb全程为Android Debug Bridge,字面意思就是安卓调试桥接.就是android系统提供的一套 工具帮我们建议一个连接android设备的通道,然后在电脑上发送一些指令,完成工作. ...

  10. iOS开发 适配iOS10以及Xcode8[转]

    现在在苹果的官网上,我们已经可以下载到Xcode8的GM版本了,加上9.14日凌晨,苹果就要正式推出iOS10系统的推送了,在此之际,iOS10的适配已经迫在眉睫啦,不知道Xcode8 beat版本, ...