浅析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 相关文章推荐
取得父标签
Nov 14 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
Jun 28 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
Oct 24 Javascript
js字符串日期yyyy-MM-dd转化为date示例代码
Mar 06 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
Apr 06 Javascript
第一次接触神奇的Bootstrap导航条
Aug 09 Javascript
微信小程序 网络API发起请求详解
Nov 09 Javascript
详解js中Json的语法与格式
Nov 22 Javascript
Vue结合原生js实现自定义组件自动生成示例
Jan 21 Javascript
jQuery实现QQ空间汉字转拼音功能示例
Jul 10 jQuery
详解Angular路由之路由守卫
May 10 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
Dec 28 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
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
php使用递归与迭代实现快速排序示例
2014/01/23 Python
Python中for循环控制语句用法实例
2015/06/02 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
python 循环while和for in简单实例
2016/08/16 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
详解Python中namedtuple的使用
2020/04/27 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
AJax面试题
2014/11/25 面试题
园林设计师自荐信
2013/11/18 职场文书
党课学习思想汇报
2014/01/02 职场文书
省文明单位申报材料
2014/05/08 职场文书
产品售后服务承诺书
2014/05/21 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
我的收音机情缘
2022/04/05 无线电