命名空间有助于减少程序中所需要的全局变量的数量,并且同时有助于避免命名冲突或过长的名字前缀。

关于命名空间的例子:

  1. /**
  2. * 创建全局对象MYAPP
  3. * @module MYAPP
  4. * @title MYAPP Global
  5. */
  6. var MYAPP = MYAPP || {};
  7.  
  8. /**
  9. * 返回指定的命名空间,如果命名空间不存在则创建命名空间。
  10. * 备注:命名时需小心,注意保留关键字,可能在一些浏览器无法使用。
  11. *
  12. * @method namespace
  13. * @param {String *} 至少需要创建一个命名空间
  14. * @return {Object} 最后一个命名空间创建的对象的引用
  15. */
  16. MYAPP.namespace = function(str){
  17. var parts = str.split("."),
  18. parent = MYAPP,
  19. i=0,
  20. l=0;
  21.  
  22. if(parts[0]==="MYAPP"){
  23. parts = parts.slice(1);
  24. }
  25. for(i=0,l=parts.length; i<l;i++){
  26. if(typeof parent[parts[i]] === "undefined"){
  27. parent[parts[i]] = {};
  28. }
  29. parent = parent[parts[i]];
  30. }
  31. return parent;
  32. }
  33.  
  34. /**
  35. * bfun是Basic Functions Extended的缩写
  36. * 作用:包括数组、字符串等等数功能扩展
  37. *
  38. * @module bfun
  39. */
  40. MYAPP.bfun = {
  41. array:(function(){
  42. return {
  43. /**
  44. * @method isArray 判断是否为数组
  45. * @param {Array} 数组
  46. * @return {Boolean} 真返回true,否则返回false
  47. */
  48. isArray: function(){
  49. return Object.prototype.toString.call(arguments[0]) === '[object Array]';
  50. },
  51. /**
  52. * @method inArray 检查值是否在数组中
  53. * @param {value,Array} 值,数组
  54. * @return {Boolean} 真返回true,否则返回undefined
  55. */
  56. inArray: function(val,arr){
  57. for(var i=0,l=arr.length;i<l;i++){
  58. if(arr[i] === val){
  59. return true;
  60. }
  61. }
  62. }
  63. }
  64. })(),
  65. string:(function(){
  66. return {
  67. /**
  68. * @method trim 过滤字符串两边多余的空格
  69. * @param {String} 字符串
  70. * @return {String} 字符串
  71. */
  72. trim: function(){
  73. return arguments[0].replace(/(^\s*)|(\s*$)/g, "");
  74. },
  75. /**
  76. * @method ltrim 过滤字符串左边多余的空格
  77. * @param {String} 字符串
  78. * @return {String} 字符串
  79. */
  80. ltrim: function(){
  81. return arguments[0].replace(/^s+/g, "");
  82. },
  83. /**
  84. * @method rtrim 过滤字符串右边多余的空格
  85. * @param {String} 字符串
  86. * @return {String} 字符串
  87. */
  88. rtrim: function(){
  89. return arguments[0].replace(/s+$/g, "");
  90. }
  91. }
  92. })()
  93. }
  94.  
  95. // 测试
  96. MYAPP.test = {
  97. init: function(){
  98. // 使用对应的模块先引用
  99. var marray = MYAPP.namespace("MYAPP.bfun.array");
  100. var mstring = MYAPP.namespace("MYAPP.bfun.string");
  101.  
  102. var arr = ["a","b"];
  103. var str = " abc ";
  104.  
  105. console.log("判断是否为数组:" + marray.isArray(arr));
  106. console.log("值是否在数组中:" + marray.inArray("a",arr));
  107. console.log("过滤左右空格:" + mstring.trim(str));
  108. }
  109. }
  110.  
  111. MYAPP.test.init();

关于js中namespace命名空间模式的更多相关文章

  1. js中创建命名空间的几种写法

    在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子: var sayHello = function() { return 'Hel ...

  2. 在js中创建命名空间的几种写法

    在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子:   var sayHello = function() { return 'H ...

  3. js中的命名空间

    尽量不要使用全局变量,防止环境污染和命名冲突. 所以,将全局变量放在一个命名空间下,是一个好的解决方案. 静态命名空间 1. 直接赋值 这是最基本的方法,但是它很啰嗦,你得重复书写多次变量名.好处是它 ...

  4. JS中的工厂模式

    .一个栗子: var BicycleShop = function(){}; BicycleShop.prototype = { sellBicycle : function( model ){ va ...

  5. js中的严格模式和非严格模式的比较

    前言 es5的严格模式是采用具有限制性JavaScript变体的一种方式,从而使代码显示地脱离'懒散模式/非严格模式' 严格模式 严格模式通过抛出错误来消除一些原有静默错误 严格模式修复了一些导致Ja ...

  6. js中的组合模式

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. JavaScript中创建命名空间

    引用:http://ourjs.com/detail/538d8d024929582e6200000c   在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺 ...

  8. 在JavaScript中创建命名空间的几种写法

    在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子: var sayHello = function() { return 'Hel ...

  9. JS命名空间模式解析

    简介 在SF上看到这样一个提问: 如题,因为不得已的原因,需要写若干个全局函数.但又不想这样: window.a = function(){} window.b = function(){} wind ...

随机推荐

  1. nohup 后台启动程序,并输出到指定日志

    1.启动程序并输入到指定日志 nohup python manage.py runserver 0.0.0.0:9090 > /data/zyj/xadstat/xadstat.log 2&am ...

  2. 这到底是什么bug?---已结贴

    问题描述:全局变量,会被莫名其妙更改!打印为50,后面做比较的时候这个值为0了. 第一,我肯定没有犯低级错误,没有其他的更改,搜索全部代码,没有发现这个变量因为我程序问题导致不符合预期,同时找了两位同 ...

  3. logrotate 日志轮询(转存)

    1.建立/etc/logrotate.d/nginx文件[1] vim /etc/logrotate.d/nginx 2.写入如下内容: /var/log/nginx/*log { daily rot ...

  4. C#学习笔记(3)——操作sqlserver数据库增删改查

    说明(2017-5-25 16:29:35): 1. VS2010,视图->服务器资源管理器->数据连接->右键添加连接->服务器名(本机可以用点)->选择数据库-> ...

  5. 从Unauthorized 401错误学习Spring Boot的Actuator

    之前用Spring Boot都是别人搭好的框架,然后自己在里面写就行了.对原理.细节上都怎么涉及,毕竟需求都做不完.但是昨天一个访问RESTful接口的401问题搞了我2个小时.网上找的很多用: ma ...

  6. [uboot]uboot中显示logo

    http://blog.chinaunix.net/uid-20543672-id-3246292.html

  7. 头文件中ifndef/define/endif的作用以及#pragma once使用

    例如:要编写头文件test.h 在头文件开头写上两行: #ifndef _TEST_H #define _TEST_H//一般是文件名的大写 ············ ············ 头文件 ...

  8. PostgreSQL LIKE 查询效率提升实验<转>

    一.未做索引的查询效率 作为对比,先对未索引的查询做测试 EXPLAIN ANALYZE select * from gallery_map where author = '曹志耘'; QUERY P ...

  9. andorid——自定义seekbar(转)

    xml 新建=>xml=>values <?xml version="1.0" encoding="utf-8"?> <resou ...

  10. DLL入门

    DllTest工程 QMath.h #pragma once #ifdef API_EXPORT #define DLL_CLASS __declspec(dllexport) #define DLL ...