浅析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 相关文章推荐
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
Mar 10 Javascript
基于JQuery的cookie插件
Apr 07 Javascript
javascript dom代码应用 简单的相册[firefox only]
Jun 12 Javascript
$.ajax返回的JSON无法执行success的解决方法
Sep 09 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
javascript计算星座属相(十二生肖属相)示例代码
Jan 09 Javascript
JavaScript随机生成信用卡卡号的方法
Apr 07 Javascript
再谈JavaScript线程
Jul 10 Javascript
AngularJS中比较两个数组是否相同
Aug 24 Javascript
JS得到当前时间的方法示例
Mar 24 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
Dec 12 Javascript
js中Map和Set的用法及区别实例详解
Feb 15 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在文件指定行中写入代码的方法
2012/05/23 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
php字符串截取函数用法分析
2014/11/25 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
jQuery中阻止冒泡事件的方法介绍
2014/04/12 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
Python实现序列化及csv文件读取
2020/01/19 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
市场营销专科应届生求职信
2013/11/24 职场文书
《绿色蝈蝈》教学反思
2014/03/02 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
个人作风建设自查报告
2014/10/22 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书