浅析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 相关文章推荐
随机显示经典句子或诗歌的javascript脚本
Aug 04 Javascript
jquery如何改变html标签的样式(两种实现方法)
Jan 16 Javascript
js实现文字在按钮上滚动的方法
Aug 20 Javascript
Vue单文件组件基础模板小结
Aug 10 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
May 31 Javascript
React组件重构之嵌套+继承及高阶组件详解
Jul 19 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
Aug 09 Javascript
vue表单自定义校验规则介绍
Aug 28 Javascript
Vue登录主页动态背景短视频制作
Sep 21 Javascript
JavaScript计算出两个数的差值
Mar 19 Javascript
react实现复选框全选和反选组件效果
Aug 25 Javascript
Vue开发中常见的套路和技巧总结
Nov 24 Vue.js
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开发的一些注意点总结
2010/10/12 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
小程序click-scroll组件设计
2019/06/18 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
python关闭占用端口方式
2019/12/17 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
送餐员岗位职责范本
2014/02/21 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
导游词之天津盘山
2019/11/01 职场文书
导游词之日月潭
2019/11/05 职场文书