浅析JavaScript中命名空间namespace模式


Posted in Javascript onJune 22, 2016

namespace即“命名空间”,也称“名称空间” 、”名字空间”。JavaScript不像C#或Java,有专门的namespace和package语法支持,当JS复杂到一定程度,尤其是引用大量的第三方JS框架和类库之后,命名冲突就会成为一个严重的问题,因此使用JS自己的变通方式建立命名空间很重要。

命名空间有助于减少程序中所需要的全局变量的数量,并且同时有助于避免命名冲突或过长的名字前缀。

关于命名空间的例子:

/**
* 创建全局对象MYAPP
* @module MYAPP
* @title MYAPP Global
*/
var MYAPP = MYAPP || {};
/**
* 返回指定的命名空间,如果命名空间不存在则创建命名空间。
* 备注:命名时需小心,注意保留关键字,可能在一些浏览器无法使用。
*
* @method namespace
* @param {String *} 至少需要创建一个命名空间
* @return {Object} 最后一个命名空间创建的对象的引用
*/
MYAPP.namespace = function(str){
var parts = str.split("."),
parent = MYAPP,
i=0,
l=0;
if(parts[0]==="MYAPP"){
parts = parts.slice(1);
}
for(i=0,l=parts.length; i<l;i++){
if(typeof parent[parts[i]] === "undefined"){
parent[parts[i]] = {};
}
parent = parent[parts[i]];
}
return parent;
}
/**
* bfun是Basic Functions Extended的缩写
* 作用:包括数组、字符串等等数功能扩展
*
* @module bfun
*/
MYAPP.bfun = {
array:(function(){
return {
/**
* @method isArray 判断是否为数组
* @param {Array} 数组
* @return {Boolean} 真返回true,否则返回false
*/
isArray: function(){
return Object.prototype.toString.call(arguments[0]) === '[object Array]'; 
},
/**
* @method inArray 检查值是否在数组中
* @param {value,Array} 值,数组
* @return {Boolean} 真返回true,否则返回undefined
*/
inArray: function(val,arr){
for(var i=0,l=arr.length;i<l;i++){
if(arr[i] === val){
return true;
}
}
}
}
})(),
string:(function(){
return {
/**
* @method trim 过滤字符串两边多余的空格
* @param {String} 字符串
* @return {String} 字符串
*/
trim: function(){
return arguments[0].replace(/(^\s*)|(\s*$)/g, "");
},
/**
* @method ltrim 过滤字符串左边多余的空格
* @param {String} 字符串
* @return {String} 字符串
*/
ltrim: function(){
return arguments[0].replace(/^s+/g, "");
},
/**
* @method rtrim 过滤字符串右边多余的空格
* @param {String} 字符串
* @return {String} 字符串
*/
rtrim: function(){
return arguments[0].replace(/s+$/g, "");
}
}
})()
}
// 测试
MYAPP.test = {
init: function(){
// 使用对应的模块先引用
var marray = MYAPP.namespace("MYAPP.bfun.array");
var mstring = MYAPP.namespace("MYAPP.bfun.string");
var arr = ["a","b"];
var str = " abc ";
console.log("判断是否为数组:" + marray.isArray(arr));
console.log("值是否在数组中:" + marray.inArray("a",arr));
console.log("过滤左右空格:" + mstring.trim(str));
}
}
MYAPP.test.init();

以上所述是小编给大家介绍的JavaScript中命名空间namespace模式的全部叙述,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Prototype使用指南之form.js
Jan 10 Javascript
ExtJS 2.0实用简明教程之应用ExtJS
Apr 29 Javascript
20条学习javascript的编程规范的建议
Nov 28 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
Jun 17 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
Nov 01 Javascript
详解JS数组Reduce()方法详解及高级技巧
Aug 18 Javascript
详谈commonjs模块与es6模块的区别
Oct 18 Javascript
vue webpack打包后图片路径错误的完美解决方法
Dec 07 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
Dec 12 Javascript
动态内存分配导致影响Javascript性能的问题
Dec 18 Javascript
微信小程序如何使用globalData的方法
Jun 06 Javascript
原生js实现无缝轮播图
Jan 11 Javascript
Javascript实现图片不间断滚动的代码
Jun 22 #Javascript
Javascript将双字节字符转换成单字节字符并计算长度
Jun 22 #Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
Jun 22 #Javascript
Javascript 5种方法实现过滤删除前后所有空格
Jun 22 #Javascript
Json解析的方法小结
Jun 22 #Javascript
JS实现刷新父页面不弹出提示框的方法
Jun 22 #Javascript
JS实现关闭当前页而不弹出提示框的方法
Jun 22 #Javascript
You might like
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php adodb连接mssql解决乱码问题
2009/06/12 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
Open and Print a Word Document
2007/06/15 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
如何使用repr调试python程序
2020/02/28 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
《藤野先生》教学反思
2014/02/19 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
教师师德表现自我评价
2015/03/05 职场文书
工程部岗位职责范本
2015/04/11 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书