首先声明js是脚本性语言,非面向对象语言。我这里所做的是尝试用js将面向对象中的各种特性模拟出来。

 

  1//定义类
  2
  3var Test=function()
  4
  5{
  6
  7     //定义私有变量
  8
  9     //这里的私有变量是指Test内部的变量
 10
 11     var priParam="Private";
 12
 13     //定义共有变量,外界及Test内部函数也可访问到
 14
 15     //这里的this指向Test
 16
 17     this.pubParam="Public";
 18
 19     
 20
 21     //定义私有函数
 22
 23     var priFun=function()
 24
 25     {
 26
 27          //这里可以访问私有变量
 28
 29          alert(priParam);
 30
 31          //这里的var变量,其作用域为priFun内,外部无法访问
 32
 33          var theParam1="theParam1";
 34
 35          alert(theParam1);
 36
 37          //这里定义this指向Test,定义this. pubParam2,其实作用就是定义了Test. pubParam2
 38
 39          //但是却访问不到pubParam,借用面向对象的说法因为pubParam不是静态变量,必须Test实例化后才可以访问
 40
 41          this. pubParam2="pubParam2";
 42
 43          alert(pubParam2);
 44
 45          alert(this.pubParam2);
 46
 47          //这里会报错
 48
 49          //alert(this.pubParam);
 50     }

 51
 52
 53
 54     //定义公有函数
 55
 56     this.pubFun=function()
 57
 58     {
 59
 60          //可以访问定义的私有函数
 61
 62          priFun();
 63
 64          //可以访问私有变量
 65
 66          alert(priParam);
 67
 68          //可以访问公有变量
 69
 70          alert(this.pubParam);
 71
 72     }

 73
 74
 75
 76     //定义初始化函数
 77
 78     this.Create=function()
 79
 80     {
 81
 82          priParam="Private Param";
 83
 84          this.pubParam="Public Param";
 85
 86     }

 87
 88     this.Create();
 89
 90}

 91
 92
 93
 94//定义并实例化一个类实例
 95
 96//这里实际调用了Test.Create();
 97
 98var test=new Test();
 99
100//Test中用this定义的变量,实例化后可以被访问,但是没办法访问priParam
101
102alert(test.pubParam);
103
104alert(test.priParam);     //会提示为undefined
105
106//可以调用pubFun();但无法调用priFun();
107
108test.pubFun();
109
110//test.priFun();     //这里会报错
111

 

 

看了上面的代码后,有心人就会发现在变量定义中var 和 this 的作用非常不一样,我们现在是知其然,那么其所以然是如何的呢?

先吃饭,回头说

posted on 2008-07-23 12:39  十分之七  阅读(683)  评论(0编辑  收藏  举报