首先聲明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 的作用非常不一樣,我們現在是知其然,那麼其所以然是如何的呢?
先吃飯,回頭說