JS模拟命名空间

简单记录下自己的理解:

  为了避免命名的冲突,Javascript可以通过使用对象来模拟实现命名空间,个人感觉这也是“动态语言”比较灵活的一个点。

 1 //--------命名空间JsFramework1-------------
 2         var JsFramework1 = window.JsFramework1 || {};
 3         JsFramework1.loadMethod1 = function () {
 4             alert("loadMethod1");
 5         };
 6         JsFramework1["loadMethod2"] = function () {
 7             alert("loadMethod2");
 8         };
 9         //--------命名空间JsFramework1-------------
10
11         //--------命名空间JsFramework1.Util--------
12         JsFramework1.Util = {};
13         JsFramework1.Util.loadMethod1 = function () {
14             alert("Util-loadMethod1");
15         };
16         JsFramework1.Util["loadMethod2"] = function () {
17             alert("Util-loadMethod2");
18         };
19         //--------命名空间JsFramework1.Util--------
20
21         JsFramework1.loadMethod1(); //loadMethod1
22         JsFramework1.loadMethod2(); //loadMethod2
23         JsFramework1.Util.loadMethod1(); //Util-loadMethod1
24         JsFramework1.Util.loadMethod2(); //Util-loadMethod2

命名空间注册机制:

 1 //--------命名空间JsFramework1子命名空间注册机制--------
 2         JsFramework1.registerNS = function () {
 3             var a = arguments, o = null, i, j, d;
 4             for (i = 0; i < a.length; ++i) {
 5                 d = a[i].split(".");
 6                 o = JsFramework1;
 7                 for (j = (d[0] == "JsFramework1") ? 1 : 0; j < d.length; ++j) {
 8                     o[d[j]] = o[d[j]] || {};
 9                     o = o[d[j]];
10                 }
11             }
12         };
13         JsFramework1.registerNS("JsFramework1.Util1", "JsFramework1.Util.StringHelper");
14         //--------命名空间JsFramework1子命名空间注册机制--------
15
16         JsFramework1.Util.StringHelper = function () {
17             alert("JsFramework1.Util.StringHelper");
18         };
19         JsFramework1.Util.StringHelper(); //JsFramework1.Util.StringHelper

参考:

  1、http://www.cnblogs.com/leafyoung/archive/2006/10/11/526570.html

  2、http://www.neoease.com/javascript-namespace/

时间: 2024-11-03 01:36:00

JS模拟命名空间的相关文章

单篇文章JS模拟分页

废话部分 前两天做了一个前台分页插件,支持ajax读取数据绑定前台 和 url带页码参数跳转两种方式.于是稍加改动,做了一个单篇文章js模拟分页的代码,为什么说是模拟分页呢?因为在服务器响应HTML请求的时候,就已经把全文回传给客户端了,只是我们通过js的方式,把全文隐藏,每次翻页至显示出我们需要的那一部分,而不是真正的按需要去发出HTML请求.所以,在做这个插件的时候去掉了ajax请求的功能及其附带参数,去掉了pageSize参数(恒等于1).这里就不讨论具体的技术细节了和上一篇的分页计算原理

JS多级命名空间

JS多级命名空间 JavaScript不像C#或Java,有专门的namespace和package语法支持,当JS复杂到一定程度,尤其是引用大量的第三方JS框架和类库之后,命名冲突就会成为一个严重的问题,因此使用JS自己的变通方式建立命名空间很重要. 最简单的实现命名空间的方法,代码示例如下: //这是伪代码,: var com;     if(!com) com = {}; //第一级域名     com.ModuleClass = {}; //第二级域名     com.ModuleCla

由chrome剪贴板问题研究到了js模拟鼠标键盘事件

写在前面 最近公司在搞浏览器兼容的事情,所有浏览器兼容的问题不得不一个人包了.下面来说一下今天遇到的一个问题吧 大家都知道IE下面如果要获得剪贴板里面的信息的话,代码应该如下所示 window.clipboardData.getData("Text") 可是在chrome下面就行不通了,chrome下面没有类似ie的这种方法,那应该怎么办呢,百度了一下,发现还真有办法. 只要在HTML界面上放上一个text类型的控件,如下所示 <textarea id="textAre

JS模拟时钟

<html> <head> <title>js模拟时钟</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body onLoad="setInterval(setTimeSpan,1000);"> <span style="fon

静态书架和js模拟翻书效果

书籍图片随便找了个,有点难看,须要的自己替换个好看点的png格式图片 源代码下载:http://download.csdn.net/detail/sweetsuzyhyf/7604091 静态书架和js模拟翻书效果,布布扣,bubuko.com

纯js模拟 radio和checkbox控件

代码待优化,功能实现了,不兼容ie8以上, 相同name的radio可以实现切换的操作, 分享代码,共同学习进步 <!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <style> .radiobox, .checkbox { width: 10px; height: 10px; padding: 2px; borde

js模拟抛出球运动

js练手之模拟水平抛球运动 -匀加速运动 -匀减速运动 代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>js模拟抛出球运动</titl

JS~模拟表单在新窗口打开,避免广告拦截

说起广告拦截,这应该是浏览器的一个特性,它会将window.open产生的窗口默认为一个广告,将它进行拦截,但有时,这不是我们所希望的,有时,我们就是需要它在客户端的浏览器上弹出一个新窗口,以展示数据处理的更新结果,例如,一个创建商品的预览功能,它需要先保存数据,然后再在新窗口展示最新的信息,这种需求并不少,而大多数人的作法就是使用window.open去弹窗口,但它确实不是一种好的方式! 新方式来了 我们知道表单提交实际上可以把POST的结果响应到新窗口上,我们就是利用表单的这种性质,在JS中

js模拟jq获取id

js模拟jq获取id: (jquery)需要自己添加 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js模拟jq的点击效果</title> <style> * {margin: 0; padding: 0;} #btn {display:block;height: 30px; width: