浅析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 相关文章推荐
Js 冒泡事件阻止实现代码
Jan 27 Javascript
JavaScript中的fontsize()方法使用详解
Jun 08 Javascript
Bootstrap学习笔记之css组件(3)
Jun 07 Javascript
JavaScript 函数模式详解及示例
Sep 07 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
Feb 21 Javascript
jquery横向纵向鼠标滚轮全屏切换
Feb 27 Javascript
Angular2 组件间通过@Input @Output通讯示例
Aug 24 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
Jun 12 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 Javascript
Vue.js实现tab切换效果
Jul 24 Javascript
JS使用setInterval计时器实现挑战10秒
Nov 08 Javascript
JavaScript 语句之常用 for 循环详解
Mar 29 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
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
php生成短网址示例
2014/05/05 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
jquery插件之easing使用
2010/08/19 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
用console.table()调试javascript
2014/09/04 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
[02:54]DOTA2英雄基础教程 撼地者
2014/01/14 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Python表示矩阵的方法分析
2017/05/26 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
python中判断文件结束符的具体方法
2020/08/04 Python
python 实现单例模式的5种方法
2020/09/23 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
高中生学习的自我评价
2013/12/14 职场文书
给老师的道歉信
2014/01/11 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
请病假条范文
2015/08/17 职场文书
golang 实用库gotable的具体使用
2021/07/01 Golang
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python