`
wxb880114
  • 浏览: 673277 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

我所遇到的JavaScript——命名空间

阅读更多
   去年一年的时间都是在跟随项目,从后台到前端、从java到javascript、从一无所知到有些思路、从对无知产生恐惧到面对需求可以有那份淡定,但由于对自己的放松,没有及时的进行总结,写自己的博客记录自己一路的收获与失误。希望今年坚持写下去,为自己加油!
   人可以胸怀理想,但必须脚踏现实。---go。
   项目中多数工作都是重复的复制粘贴修改,但在这个重复枯燥的过程中,引发了自己对自己的思考,真的需要这么做吗?真的只能这么做吗?是不是有更好的方法?是不是可以把重复的提炼出来进行封装?但整个项目都是同一风格,一修改等于重新来过,甲方等不了,项目经理也等不了,得到了我也等不了的错误结论,一次次的没那个勇气去修改,进入一次次的纠结之中。
   造成现有的原因我个人觉得以下几点:
   1)核心代码非经验丰富者写;
   2)自身惰性,一叶障目不想见泰山;
   3)实际项目进度严格控制。
 
   发了些牢骚,但也是今年自身需要去克服的困难,
   1)没有经验丰富者可以去看开源项目、看淘宝看京东怎么写的;
   2)惰性需要渴望来治,渴望有所成就,渴望有所收获,渴望学以致用,实现自我价值;
   3)项目开发过程中尽量不改动也完成的功能模块,逐步引入新的思想,新的代码风格,迭代开发,保持项目进度。

   进入正题js的命名空间:
  1.命名空间的由来
     在js中没有类、对象这些概念,变量和函数,类的相关机制都是通过原型来实现的;于是在简单项目中直接定义function,当然自身单词量够用。但对于大型项目,多小组协同开发,代码量大,就导致变量名、函数名等各种冲突,错误不易发现及修改和代码难于管理维护。
     命名空间 namespace 是解决上述问题的一种有效方式;大型网站如Yahoo都有自己的命名空间。
2.命名空间的作用
     1)避免不同js文件中命名冲突;
     2)协同开发易于管理;
     3)统一代码风格,便于学习、上手、维护。  
3.js中的命名空间
  
        // 声明一个全局对象Namespace,用来注册命名空间
 Namespace = new Object();
 
// 全局对象仅仅存在register函数,参数为名称空间全路径,如"Grandsoft.GEA"
 Namespace.register = function(fullNS)
 {
     // 将命名空间切成N部分, 比如Grandsoft、GEA等
     var nsArray = fullNS.split('.');
     var sEval = "";
     var sNS = "";
     for (var i = 0; i < nsArray.length; i++)
     {
         if (i != 0) sNS += ".";
          sNS += nsArray[i];
         // 依次创建构造命名空间对象(假如不存在的话)的语句
         // 比如先创建Grandsoft,然后创建Grandsoft.GEA,依次下去
          sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"
      }
     //通过eval函数转换成可执行的代码,并创建对象
     if (sEval != "") eval(sEval);
 }   

4.项目中如何使用
  yui的命名方式
 
var YAHOO = window.YAHOO || {};
 

YAHOO.namespace = function(ns) {
 
    if (!ns || !ns.length) {
         return null;
      }
 
    var levels = ns.split(".");
     var nsobj = YAHOO;
 
    // YAHOO is implied, so it is ignored if it is included
     for (var i=(levels[0] == "YAHOO") ? 1 : 0; i<levels.length; ++i) {
          nsobj[levels[i]] = nsobj[levels[i]] || {};
          nsobj = nsobj[levels[i]];
      }
 
    return nsobj;
 };


资料:http://www.cnblogs.com/Ihaveadream/archive/2008/06/04/1213611.html
https://developer.mozilla.org/zh-CN/docs/XUL_School-840092-dup/JavaScript_Object_Management
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics