浅析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 相关文章推荐
jquery调取json数据实现省市级联的方法
Jan 29 Javascript
JScript中的条件注释详解
Apr 24 Javascript
ajax在兼容模式下失效的快速解决方法
Mar 22 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
Apr 28 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
Jun 07 Javascript
如何判断出一个js对象是否一个dom对象
Nov 24 Javascript
JavaScript中双符号的运算详解
Mar 12 Javascript
关于使用axios的一些心得技巧分享
Jul 02 Javascript
在Vue项目中使用d3.js的实例代码
May 01 Javascript
mpvue 单文件页面配置详解
Dec 02 Javascript
vue缓存之keep-alive的理解和应用详解
Nov 02 Javascript
让JavaScript代码更加精简的方法技巧
Jun 01 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
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
php字符集转换
2017/01/23 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
JavaScript 实现??打印?理
2007/04/28 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
[04:32]DOTA2著名解说配音敌法师 现场专访海涛怒切假腿
2013/12/20 DOTA
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python金融数据可视化汇总
2017/11/17 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
Python基础之文件读取的讲解
2019/02/16 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
物业保安主管岗位职责
2013/12/25 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
早恋主题班会
2015/08/14 职场文书
《所见》教学反思
2016/02/23 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书