在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. jQuery静态方法globalEval使用和源码分析

    Eval函数大家都很熟悉,但是globalEval方法却很少使用,大多数参考手册也没有相关api,下面就对其用法和源码相应介绍: jQuery.globalEval()函数用于全局性地执行一段Java ...

  2. ArcGIS工具之ET GeoWizards、GeoTools、GeoTools

    简介 ET GeoWizards是ET SpatialTechniques一套基于ArcGIS的工具集,从2002年开始,其设计的初衷: (1)让ArcView用户拥有ArcEditor甚至ArcIn ...

  3. SharePoint 2013 Search REST API 使用示例

    前言:在SharePoint2013中,提供Search REST service搜索服务,你可以在自己的客户端搜索方法或者移动应用程序中使用,该服务支持REST web request.你可以使用K ...

  4. Android开发学习——打电话应用

    打电话应用 system/app/phone.apk  这个是打电话应用,这个Java API 不允许应用级程序员改写,系统级才可以 system/app/dialer.apk  这个是拨号器应用,可 ...

  5. Android:Toast

    Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失.而且Toast主要用于向用户显示提示消 ...

  6. iOS cocoapods升级及问题

    安装 安装RubyCocoaPods基于Ruby语言开发而成,因此安装CocoaPods前需要安装Ruby环境.幸运的是Mac系统默认自带Ruby环境,如果没有请自行查找安装.检测是否安装Ruby:$ ...

  7. 熟悉HTML CSS布局模型

    HTML最难的地方来了!这个我反复了很多遍, 包括现在写博客, 也对我自己算是一种温习, 我这块怕是没办法写的很好懂, 因为我自己还不能把我学到的准确通俗易懂的表达出来, 给自己记个笔记, 以后再来一 ...

  8. 了解HTML 盒模型

    HTML在布局上, 有一个非常重要的模型, 那就是盒子模型, 在盒子模型中把标签内容理解为一个物品, 而css样式理解为包容着这个物品的盒子, 一般的块级标签都具有盒子模型的特征, 你可以在css中对 ...

  9. iOS 用 SDWebImage 清理图片缓存

    效果图如下: 1.找到 SDWebImage找到SDImageCache类 2.添加如下方法 - (float)checkTmpSize { ; NSDirectoryEnumerator *file ...

  10. 一步步搭建react-native环境(苹果OS X)

    因重新升级了系统,一步步搭建react-native环境. 1.安装Homebrew 打开终端命令->ruby -e "$(curl -fsSL https://raw.githubu ...