沒有眼淚
          Don't Cry!
          posts - 13,comments - 44,trackbacks - 0
                  Ext2.0中,Ext類有個namespace方法,該方法的作用是把傳入的參數轉換成對象.使用該方法的目的主要在于可以區分類名相同的類,這有點和java中的package作用類似.讓我們先看下源碼:
          namespace : function(){
              
          var a=arguments, o=null, i, j, d, rt;
              
          for (i=0; i<a.length; ++i) {
                  d
          =a[i].split(".");
                  rt 
          = d[0];
                      eval('
          if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
                  
          for (j=1; j<d.length; ++j) {
                      o[d[j]]
          =o[d[j]] || {};
                         o
          =o[d[j]];
                  }

              }

          }
          從代碼可以看出,如果我們傳入的字符串參數是以"."分割的,那么將會創建多個對象,比如:
          Ext.namespace('system.corp');
          則會創建2個對象,相當于執行了下面的代碼:
          system = {};
          system.corp 
          = {};
          這樣,我們在自定義類的時候就能這樣使用:
          Ext.namespace('system.corp');

          system.corp.ManageCorp 
          = function() {
              
          //dosomething
          }
          如果還想定義一個同名的類,那么可以就使用不同的namespace來區分,這樣2個類就不會沖突了:
          Ext.namespace('system.admin');

          system.admin.ManageCorp 
          = function() {
              
          //dosomething
          }

          此外,注意源碼中"eval"方法的使用,如果有需要可以采用這種方式來解決問題.
          posted on 2008-03-19 22:24 zhangchao 閱讀(1674) 評論(8)  編輯  收藏 所屬分類: Ext

          FeedBack:
          # re: Ext中的namespace[未登錄]
          2008-04-04 10:16 | hehe
          0和o不分,很難讓人看懂那個namespace的意思,呵呵。  回復  更多評論
            
          # re: Ext中的namespace[未登錄]
          2008-04-04 11:04 | hehe
          之所以能夠這樣做,主要是因為在執行eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
          時,沒有在rt前面加var 關鍵字,或者說沒有加var關鍵字的變量定義,其作用域是全局的。
          o[d[j]]=o[d[j]] || {};
          o=o[d[j]];
          這兩句完成對象的創建和鏈接引用。
            回復  更多評論
            
          # re: Ext中的namespace
          2008-04-08 12:09 | zhangchao
          @hehe
          編輯的時候我用的是'0',但不知怎么搞的發布后就變成'o'了。既然你已經看出應該是'0',那么你也應該知道namespace怎么用了,呵呵.  回復  更多評論
            
          # re: Ext中的namespace
          2008-04-08 12:11 | zhangchao
          @hehe
          這跟全局變量和局部變量沒有關系,況且'var a=arguments, o=null, i, j, d, rt;'
          已經用var聲明了變量o.  回復  更多評論
            
          # re: Ext中的namespace
          2009-06-29 17:59 | gongmingwind
          請教下
          o和rt不都是局部變量嗎,為什么會創建兩個全局變量呢?  回復  更多評論
            
          # re: Ext中的namespace
          2009-06-29 22:31 | gongmingwind
          @gongmingwind
          這個我弄明白了!呵呵,在js中,沒有定義的變量默認為全局變量。  回復  更多評論
            
          # re: Ext中的namespace
          2009-06-29 22:32 | gongmingwind
          謝謝,你的文章  回復  更多評論
            
          # re: Ext中的namespace
          2009-07-17 17:59 | 得到
          很好  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 辛集市| 绥化市| 阿拉尔市| 淮北市| 温州市| 仪陇县| 凤城市| 沅陵县| 龙州县| 错那县| 莱州市| 鹤山市| 海丰县| 油尖旺区| 庆安县| 城市| 长阳| 唐河县| 抚州市| 兖州市| 旅游| 扶沟县| 岳普湖县| 永和县| 南投县| 太和县| 凤翔县| 虎林市| 高唐县| 扎兰屯市| 莱西市| 措勤县| 清涧县| 汾西县| 福安市| 滨海县| 龙口市| 临江市| 孙吴县| 靖州| 雷山县|