Javadream

          A long way and a dream.

          Ext 2 學習筆記(二):Ext命名空間

          Posted on 2008-02-11 11:19 oxl 閱讀(1664) 評論(0)  編輯  收藏 所屬分類: 技術感語
           1 var btn1Text = "Hello, world.";
           2 
           3 // 填充圖片的本地引用
           4 Ext.BLANK_IMAGE_URL = '../ext/resources/images/default/s.gif';
           5 
           6 // 申明名字空間,用于下面的定義。
           7 Ext.namespace("myNameSpace");
           8 
           9 // 定義名字空間。
          10 // 注意這里,因為function是立即運行的(因為最后還有個括號),所以myNameSpace.app得到的是這個函數返回的結果。
          11 // 因為函數內定義的變量是不能被外部訪問的,利用這種方式可以把變量定義為私有的方式。
          12 // 因為返回的是一個對象,所以app得到的結果就是一個對象,所以就可以通過.運算符得到這個返回對象的變量和方法,
          13 // 這樣就可以利用這點申明為公用的變量。
          14 myNameSpace.app = function() {
          15     // 私有變量
          16     var btn1;
          17     var privVar1 = 11;
          18     
          19     // 私有函數
          20     var btn1Handler = function(button, event) {
          21         // 這里很巧妙,雖然表面上說是私有函數可以訪問私有變量,可是這里利用了函數棧的概念,
          22         // 即函數可以訪問上一層函數定義的變量,這里的privVar1就是上一層函數中定義的變量了。
          23         alert('privVar1=+ privVar1);
          24         
          25         // 因為這里的this指向的window對象,所以這里的this.btn1Text為undefined.
          26         // 當把它賦給一個對象的時候,this指向這個對象,也就是像下的調用一樣。    
          27         alert('this.btn1Text=+ this.btn1Text);
          28     };
          29     
          30     // 公共空間
          31     return {
          32         btn1Text: 'Button 1',
          33         
          34         init: function() {
          35             btn1 = new Ext.Button({
          36                 renderTo: 'btn1-ct',
          37                 text: this.btn1Text,
          38                 handler: btn1Handler,
          39                 scope: this
          40             });
          41             
          42             // 調用btn1Handler函數,這里函數里的this指向的是window
          43             btn1Handler();
          44         }
          45     };
          46 }();
          47 
          48 Ext.apply(myNameSpace.app, {
          49     btn1Text: "Hello, Ext 2.0",
          50     
          51     // 這里所說的重寫特權函數也無法訪問私有變量或私有函數,其實是因為他不在函數上下文,無法訪問函數上一層定義的變量而已。
          52     init: function() {
          53         try {
          54             btn1 = new Ext.Button({
          55                 renderTo: 'btn1-ct',
          56                 text: this.btn1Text,
          57                 handler: btn1Handler,
          58                 scope: this
          59             });
          60         } catch (e) {
          61             alert('錯誤: "' + e.message + '" 發生在行: ' + e.lineNumber);
          62         }
          63     }
          64 });
          主站蜘蛛池模板: 会东县| 新兴县| 汨罗市| 南乐县| 游戏| 兴隆县| 辉南县| 五寨县| 辽宁省| 寻乌县| 旌德县| 屏东县| 呈贡县| 荣昌县| 鹿邑县| 天台县| 阿坝| 平阳县| 体育| 瑞安市| 巴楚县| 漳州市| 东乌| 五原县| 新丰县| 藁城市| 浦北县| 石泉县| 满洲里市| 胶南市| 济宁市| 正阳县| 大悟县| 绩溪县| 建湖县| 贡山| 定结县| 双牌县| 汶上县| 绥中县| 澳门|