沒有眼淚
          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 | 得到
          很好  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 高州市| 三穗县| 衢州市| 平邑县| 常德市| 大城县| 康定县| 龙井市| 忻城县| 三都| 达拉特旗| 色达县| 金沙县| 化隆| 宁河县| 西平县| 沂水县| 盐城市| 长乐市| 外汇| 成安县| 兴文县| 楚雄市| 霞浦县| 大厂| 壤塘县| 吴江市| 新和县| 诸城市| 米泉市| 开封市| 深泽县| 仙游县| 蒲城县| 象州县| 镇远县| 天津市| 芜湖市| 黔江区| 日土县| 秦皇岛市|