1 //创建一个对象,然后给这个对象新建属性和方法 2 3 var box = new Object(); //创建对象 4 box.user='Fu'; //添加属性 5 box.age=23; 6 box.run=function(){ 7 return this.user+this.age+'运行中...'; 8 } 9 //this表示new Object()实例化出来的那个对象 10 11 alert(box); //object Object 12 alert(box.user); 13 alert(box.run()); 14 15 16 var box2=new Object(); 17 box2.user='Baixc'; 18 box2.age=24; 19 box2.run=function(){ 20 return this.user+this.age+'运行中...'; 21 } 22 23 alert(box2.run()); 24 25 26 27 //工厂模式 28 //工厂模式解决了重复实例化的问题,但还有一个问题,那就是识别问题,因为根本无法高兴才他们到底是哪个对象的实例。 29 function creareObject(user,age){ 30 var obj = nwe Object(); //创建对象 31 obj.user=user; //添加属性 32 obj.age=age; 33 obj.run=function(){ //添加方法 34 return thi.user+this.age+'运行中...'; 35 }; 36 return obj; //返回对象引用 37 } 38 39 var box1=creareObject('Fu',23); //创建第一个对象 40 var box2=creareObject('Baixc',22); //创建第二个对象 41 42 alert(box1.run()); //打印第一个对象实例的run()方法 43 alert(box2.run()); 44 45 alert(typeof box1); //object 46 alert(typeof box2); //object 47 48 alert(box1 instanceof Object); //true 49 alert(box2 instanceof Object); //true 50 51 52 53 // 构造函数(构造方法)可以用来创建特定的对象。 54 function Box(user,age){ //创建一个对象 55 this.user=user; //添加一个属性 56 this.age=age; 57 this.run=function(){ 58 return this.user+this.age+'运行中...'; 59 }; //这个分号是一定要加的 60 }; 61 62 var box1=new Box('Fu',23); 63 var box2=new Box('Baixc',22); 64 65 alert(box1.run()); 66 alert(box2.run()); 67 alert(Box('Fu',23)); //构造函数,用普通函数调用一般是无效的,必须使用new运算符 68 69 /* 70 使用构造函数的方法,即解决了重复实例化的问题,又解决了对象识别的问题,但问题是,这里并没有new Object(),为什么可以实例化Box(),这个是哪里来的呢? 71 72 使用了构造函数的方法,和使用工厂模式的方法他们不同之处如下: 73 1、构造函数方法没有显示的创建对象(new Object()); 74 2、直接将属性和方法赋值给this对象; 75 3、没有return语句。 76 77 78 构造函数规范: 79 1、构造函数也是函数,但函数名第一个字母大写 80 2、必须new构造函数名(),new Box(),而这个Box第一个字母也是大写的。 81 3、必须使用new运算符 82 83 */ 84 85 function box(){ //普通函数首字母无需大写 86 87 } 88 89 90 var o = new Object(); 91 Box.call(o,'Fu',23); //对向冒充 92 alert(o.run());