浅析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 相关文章推荐
syntaxhighlighter 使用方法
Jul 02 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
Dec 14 Javascript
JS异常处理的一个想法(sofish)
Mar 14 Javascript
JS图片无缝、平滑滚动代码
Mar 11 Javascript
node.js中的fs.exists方法使用说明
Dec 17 Javascript
7个有用的jQuery代码片段分享
May 19 Javascript
Backbone.js框架中Model与Collection的使用实例
May 07 Javascript
微信小程序顶部导航栏滑动tab效果
Jan 28 Javascript
JavaScript怎样在删除前添加确认弹出框?
May 27 Javascript
Vue内部渲染视图的方法
Sep 02 Javascript
JavaScript如何判断input数据类型
Feb 06 Javascript
Element-ui upload上传文件限制的解决方法
Jan 22 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套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
Node.js 使用jade模板引擎的示例
2018/05/11 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
微信小程序实现发微博功能的示例代码
2020/06/24 Javascript
js实现星星打分效果
2020/07/05 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
存储过程的优点有哪些
2012/09/27 面试题
口头翻译求职人自荐信
2013/12/07 职场文书
青年教师培训方案
2014/02/06 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
2015暑期社会实践通讯稿
2015/07/18 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书