javascript——面向对象程序设计(3)

时间:2021-08-01 17:20:30
 1 <script type="text/javascript">
 2         //1、结合使用构造函数模式和原型模式
 3         //2、动态原型模式
 4         //3、寄生构造函数模式
 5         //4、稳妥构造函数模式
 6 
 7         //创建自定义类型的常见方式就是组合使用构造函数模式和原型模式。构造函数模式用于定义是实例属性,而原型模式用于定义
 8         //实例属性,而原型用于定义方法和共享的属性。结果,每个实例都会有自己的副本,但同时又共享着对方法的引用,节省内存。
 9 
10         function Person(name, age, job) {
11             var _self = this;
12             _self.name = name;
13             _self.age = age;
14             _self.job = job;
15             _self.friends = ["张三", "李四"];
16         }
17 
18         Person.prototype = {
19             constructor: Person,
20             sayName: function () {
21                 alert(this.name);
22             }
23         }
24 
25 
26         var person1 = new Person("徐磊", 23, "IT");
27         var person2 = new Person("刘德华", 55, "歌手");
28 
29         person1.friends.push("张学友");
30         alert(person1.friends);
31         alert(person2.friends);
32         alert(person1.friends === person2.friends);//false
33         alert(person1.sayName === person2.sayName);//true
34 
35         //2、动态原型模式
36         function Person(name,age,job){
37             this.name=name;
38             this.age=age;
39             this.job=job;
40             if(typeof this.sayName !="function"){
41                 Person.prototype.sayName=function(){
42                     alert(this.name)
43                 }
44             }
45         }
46 
47         //3、寄生构造函数模式
48         function Person(name,age,job) {
49             var o=new Object();
50             o.name=name;
51             o.age=age;
52             o.job=job;
53             o.sayName=function(){
54                 alert(this.name);
55             }
56             return o;
57         }
58 
59         //这个模式可以在特殊情况下为对象创建构造函数。
60         function SpecialArray() {
61             var values=new Array();
62             values.push.apply(values,arguments);
63             values.toPiedString=function(){
64                 return this.split('|');
65             }
66             return values;
67         }
68 
69         var colors=new SpecialArray("red","blue","green");
70         colors.toPiedString();//"red|blue|green"
71 
72 
73         //4、稳妥构造函数模式
74         //稳妥构造函数的模式是遵循寄生构造函数的模式,但是有两点不同:1、新创建对象的实例方法不引用this;2、不使用new操作符调用构造函数
75         function Person(name,age,job) {
76             var o=new Object();
77             //这里可以定义私有变量
78             //添加方法
79             o.sayName=function(){
80                 alert(this.name);
81             }
82             return o;
83         }
84 
85         var friends=Person("xulei",23,"IT");
86         friends.sayName();//xulei
87 
88 
89     </script>