js 函数常见的三种实例化方式

 1         //工厂模式
 2         function oj(){
 3             var lio=new Object(); //创建对象,对象属性赋值
 4             lio.name='lio';
 5             lio.attr='男';
 6             lio.hobby=function(){
 7                 var li=document.createElement("p");
 8                 var txt=document.createTextNode("三妹");
 9                 li.appendChild(txt);
10                 document.body.appendChild(li);
11             };
12             return lio;
13         }
14         var person=oj();
15         //alert(person.name);
16 
17         //构造函数模式
18         function oj2(name,age){
19             this.name=name;
20             this.age=age;
21             this.hobby=function(){
22                 var li=document.createElement("p");
23                 var txt=document.createTextNode("三妹");
24                 li.appendChild(txt);
25                 document.body.appendChild(li);
26             }
27         }
28         var person2=new oj2('三妹',123);
29         person2.hobby();
30         alert(person2.name);
31 
32         //原型模式
33         function oj3(){
34             //this.name='lio';
35         }
36         oj3.prototype.name='lio';
37         oj3.prototype.love= function (name) {
38             alert("爱"+name);
39         };
40         var person3=new oj3();
41         //检测是在实例中还是在原型中
42         alert(person3.hasOwnProperty("name"));
43         alert(person3.hasOwnProperty("rename"));
44         person3.love('三妹');
45 
46         //混合模式
47         function oj4(age) {
48             this.age=age;
49             this.rename='aaaa';
50         };
51         oj4.prototype={
52             constructor:oj4,
53             name:'lio',
54             age:123,
55             love: function (name) {
56                 alert(name+"爱三妹");
57             }
58         };
59         var person4=new oj4(18);
60         alert(person4.hasOwnProperty("age"));//true
61         person4.love('lio');