构造函数

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6     <script type="text/javascript">
 7    /*
 8    使用工厂方法创建对象
 9    通过该方法可以大批量创建对象
10    */
11   function createPerson(name,age,gender){
12       var obj=new Object();
13       obj.name=name;
14       obj.age=age;
15       obj.gender=gender;
16       //将新的对象返回
17       obj.sayName=function();
18       alert(this.name);
19       return obj;
20   }
21   var obj2=createPerson("w",20,"1");
22   console.log(obj2);
23   /*
24   使用工厂方法创建的对象,使用的构造函数都是Object
25   所以创建的对象都是Object这个类型,就导致无法区分出多种不同类型的对象
26   
27   */
28  /*
29  创建一个构造函数,专门用来创建Person对象的
30  构造函数就是一个普通的函数,创建方式和普通函数没有区别
31  不同的是构造函数习惯上首字母大写
32  
33  构造函数和普通函数的区别就是调用方式的不同
34  普通函数就是直接调用,构造函数需要使用new关键字
35  
36  构造函数执行流程:
37  1.立刻创建一个新的对象
38  2.将新建的对象设置为函数中this,在构造函数中可以使用this来引用新建的对象
39  3.逐行执行函数中的代码
40  4.将新建的对象作为返回值
41  
42  使用同一个构造函数创建的对象,称为一类对象,也将构造函数称为一个类
43  */
44 function Person(name,age){
45     this.name=name;
46     this.age=age;
47     //this.sayName=function(){
48     //    alert("i am"+this.name);
49     //}
50     this.sayName=fun;
51 }
52 //将sayName方法在全局中定义
53 function fun(){
54     alert(this.name);
55 }
56 //var per=Person();普通函数调用
57 var per=new Person("123",12);//构造函数调用
58 var per2=new Person("123",123);
59 console.log(per.name);
60 console.log(per.sayName()==per2.sayName());//true调用的是同一个函数
61 /*
62 使用instanceof可以检查一个对象是否是一个类的实例
63 对象 instanceof 构造函数 如果是则返回true,否则返回false
64 
65 this:
66 1.当以函数形式调用时,this是window
67 2.当以方法形式调用时,谁调用this就是谁
68 3.当以构造函数形式调用时,this就是新创建的那个对象
69 */
70 
71 /*
72 创建一个Person构造函数
73 在Person构造函数中,为每一个对象都添加了一个sayName方法,
74 目前我们的方法是在构造函数内部创建的,也就是构造函数每执行一次就会创建一个新的sayName方法
75 这是完全没有必要的,完全可以使所有的对象都调用一个方法
76 */
77 console.log(per instanceof Person);
78     </script>
79     <head>
80     <body>
81     </body>
82 </html>

 

posted @ 2019-07-21 17:18  zuiaimiusi  阅读(134)  评论(0编辑  收藏  举报