面向对象的JavaScript (一、对象基础,使用函数来模拟类)

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());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值