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 });