Javadream

A long way and a dream.

Ext 2 学习笔记(二):Ext命名空间

Posted on 2008-02-11 11:19 oxl 阅读(1648) 评论(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 });

只有注册用户登录后才能发表评论。


网站导航: