Posted on 2008-02-11 11:19
oxl 閱讀(1661)
評論(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 });