浅谈js命名空间管理
在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命名空间管理的更多相关文章
- 浅谈JS面向对象
浅谈JS面向对象 一 .什么是面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.注重代码的过程部分. 二.什么是面向对象 最先出现在管理学 ...
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- 浅谈JS之AJAX
0x00:什么是Ajax? Ajax是Asynchronous Javascript And Xml 的缩写(异步javascript及xml),Ajax是使用javascript在浏览器后台操作HT ...
- 浅谈JS中的闭包
浅谈JS中的闭包 在介绍闭包之前,我先介绍点JS的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...
- 浅谈 js 正则字面量 与 new RegExp 执行效率
原文:浅谈 js 正则字面量 与 new RegExp 执行效率 前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化 ...
- 浅谈 js 字符串之神奇的转义
原文:浅谈 js 字符串之神奇的转义 字符串在js里是非常常用的,但是你真的了解它么?翻阅<MDN String>就可以了解它的常见用法了,开门见山的就让你了解了字符串是怎么回事. 'st ...
- 浅谈 js 正则之 test 方法
原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. var re = /\d/; console. ...
- 浅谈 js 数字格式类型
原文:浅谈 js 数字格式类型 很多人也许只知道 ,123.456,0xff 之类的数字格式.其实 js 格式还有很多数字格式类型,比如 1., .1 这样的,也有 .1e2 这样的. 可能有人说这是 ...
- 浅谈 js 语句块与标签
原文:浅谈 js 语句块与标签 语句块是什么?其实就是用 {} 包裹的一些js代码而已,当然语句块不能独立作用域.可以详细参见这里<MDN block> 也许很多人第一印象 {} 不是对象 ...
随机推荐
- jQuery静态方法globalEval使用和源码分析
Eval函数大家都很熟悉,但是globalEval方法却很少使用,大多数参考手册也没有相关api,下面就对其用法和源码相应介绍: jQuery.globalEval()函数用于全局性地执行一段Java ...
- ArcGIS工具之ET GeoWizards、GeoTools、GeoTools
简介 ET GeoWizards是ET SpatialTechniques一套基于ArcGIS的工具集,从2002年开始,其设计的初衷: (1)让ArcView用户拥有ArcEditor甚至ArcIn ...
- SharePoint 2013 Search REST API 使用示例
前言:在SharePoint2013中,提供Search REST service搜索服务,你可以在自己的客户端搜索方法或者移动应用程序中使用,该服务支持REST web request.你可以使用K ...
- Android开发学习——打电话应用
打电话应用 system/app/phone.apk 这个是打电话应用,这个Java API 不允许应用级程序员改写,系统级才可以 system/app/dialer.apk 这个是拨号器应用,可 ...
- Android:Toast
Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失.而且Toast主要用于向用户显示提示消 ...
- iOS cocoapods升级及问题
安装 安装RubyCocoaPods基于Ruby语言开发而成,因此安装CocoaPods前需要安装Ruby环境.幸运的是Mac系统默认自带Ruby环境,如果没有请自行查找安装.检测是否安装Ruby:$ ...
- 熟悉HTML CSS布局模型
HTML最难的地方来了!这个我反复了很多遍, 包括现在写博客, 也对我自己算是一种温习, 我这块怕是没办法写的很好懂, 因为我自己还不能把我学到的准确通俗易懂的表达出来, 给自己记个笔记, 以后再来一 ...
- 了解HTML 盒模型
HTML在布局上, 有一个非常重要的模型, 那就是盒子模型, 在盒子模型中把标签内容理解为一个物品, 而css样式理解为包容着这个物品的盒子, 一般的块级标签都具有盒子模型的特征, 你可以在css中对 ...
- iOS 用 SDWebImage 清理图片缓存
效果图如下: 1.找到 SDWebImage找到SDImageCache类 2.添加如下方法 - (float)checkTmpSize { ; NSDirectoryEnumerator *file ...
- 一步步搭建react-native环境(苹果OS X)
因重新升级了系统,一步步搭建react-native环境. 1.安装Homebrew 打开终端命令->ruby -e "$(curl -fsSL https://raw.githubu ...