首先声明js是脚本性语言,非面向对象语言。我这里所做的是尝试用js将面向对象中的各种特性模拟出来。
1
//定义类
2![]()
3
var 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![]()
98
var test=new Test();
99![]()
100
//Test中用this定义的变量,实例化后可以被访问,但是没办法访问priParam
101![]()
102
alert(test.pubParam);
103![]()
104
alert(test.priParam); //会提示为undefined
105![]()
106
//可以调用pubFun();但无法调用priFun();
107![]()
108
test.pubFun();
109![]()
110
//test.priFun(); //这里会报错
111![]()
//定义类2

3
var Test=function()4

5
{6

7
//定义私有变量8

9
//这里的私有变量是指Test内部的变量10

11
var priParam="Private";12

13
//定义共有变量,外界及Test内部函数也可访问到14

15
//这里的this指向Test16

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. pubParam238

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

98
var test=new Test();99

100
//Test中用this定义的变量,实例化后可以被访问,但是没办法访问priParam101

102
alert(test.pubParam);103

104
alert(test.priParam); //会提示为undefined105

106
//可以调用pubFun();但无法调用priFun();107

108
test.pubFun();109

110
//test.priFun(); //这里会报错111

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


浙公网安备 33010602011771号