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>