面向对象的JavaScript (一、对象基础,使用函数来模拟类)
2010-09-14 13:30:56 来源:WEB开发网function Person(name, age) {
2
3 //私有变量(private variables)
4 var myName = name;
5 var myAge = age;
6
7 //公共属性(public properties)
8 this.name = myName;
9 this.age = myAge;
10
11 //私有函数(private functions)
12 function getMyName() {
13 return myName;
14 };
15
16 function getName() {
17 return name;
18 };
19
20 var getMyAge = function () {
21 return myAge;
22 };
23
24 var getAge = function () {
25 return age;
26 };
27
28 //特权方法(privileged methods)
29 this.getName = function () {
30 return this.name;
31 //return myName; 可以访问私有变量
32 //return name; 可以访问构造函数参数(其参数本质也是私有变量)
33 //return getMyName(); 可以访问私有函数
34 //return getName(); 可以访问私有函数
35 };
36
37 this.getAge = function () {
38 return getAge();
39 };
40
41 this.getRealAge = function () {
42 return this.age;
43 };
44}
45
46//公共方法(public methods)
47Person.prototype.acceptName = function (param) {
48 this.name = param;
49 //name = param; 公共方法不能访问私有变量
50 //myName = param; 公共方法不能访问私有变量
51};
52
53//原型属性(prototype properties)
54Person.prototype.legs = 2;
55
56//静态属性(static properties)
57//整个类只有一个静态属性,各个对象共享同一个静态属性值
58Person.arms = 2;
59
60Person.getArms = function () {
61 return Person.arms;
62 //return this.arms; 可以使用this来指代Person对象本身
63};
64
65/**//*
66Person是一个逻辑上的类,他的本质是一个Function,在JavaScript中类是由Function来模拟的,所以Person还是一个Function的实例。而arms和getArms方法是一个Function对象实例上的属性和方法,是Person对象所特有的,所以本例可以使用Person.arms来引用,同时在getArms方法中,可以使用this.arms来引用,因为getArms是Person对象上的方法,在该方法内部this指代Person对象自身。
67*/
68alert(Person.getArms());
69
70var pa = new Person("Teddy", 25);
71
72//alert(pa.myName); 不能访问私有变量
73
74alert(pa.name);
75
76alert(pa.getAge());
77
78pa.acceptName("Born");
79
80alert(pa.getName());
81
82var pb = new Person("John", 18);
83
84//运行时动态加入方法
85Person.prototype.acceptAge = function (param) {
86 this.age = param;
87};
88
89//pb对象也可以调用动态添加的方法
90pb.acceptAge(30);
91
92alert(pb.getAge());
93
94alert(pb.getRealAge());
95
96//运行时覆盖已定义方法
97Person.prototype.acceptName = function (param) {
98 return param;
99};
100
101//所有已创建对象都自动继承被覆盖的方法
102alert(pa.acceptName("Black"));
103
104alert(pa.getName());
105
106alert(pa.legs);
107
108//运行时改变原型属性值
109Person.prototype.legs = 4;
110
111//所有已创建对象都自动继承被改变的原型属性值
112alert(pb.legs);
113
114//运行时将原型属性改为公共方法
115Person.prototype.legs = function () {
116 return 4;
117};
118
119//所有已创建对象都自动继承原型属性到公共方法的改变
120alert(pa.legs());
Tags:面向 对象 JavaScript
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接