你的位置:首页 > Java教程

[Java教程]js对象2


一:工厂模式引入前提例子

  先看一个案例

 1 <script type="text/javascript"> 2   var person= new Object();  //创建一个对象 3   person.name = "小龙哥"; //给对象添加一个name属性 4   person.sex = "男";    //给对象添加一个属性 sex 5   person.sayName = function(){ 6     alert("大家好我是:"+this.name);  // 打印出:大家好我是:小龙哥      这里的this代表调用该方法的对象 7   } 8   person.saySex = function(){ 9     alert("性别"+this.sex);  // 打印出:性别男      这里的this代表调用该方法的对象10   }11 </script>

假象:加入当前有很多的人名,是不是应该像下面这样

 1 <script type="text/javascript"> 2   var person2= new Object();  //创建一个对象 3   person2.name = "小龙哥2"; //给对象添加一个name属性 4   person2.sex = "男";    //给对象添加一个属性 sex 5   person2.sayName = function(){ 6     alert("大家好我是:"+this.name);  // 打印出:大家好我是:小龙哥2      这里的this代表调用该方法的对象 7   } 8   person2.saySex = function(){ 9     alert("性别"+this.sex);  // 打印出:性别男      这里的this代表调用该方法的对象10   }
11 var person= new Object(); //创建一个对象12 person3.name = "小龙哥3"; //给对象添加一个name属性13 person3.sex = "男"; //给对象添加一个属性 sex14 person3.sayName = function(){15   alert("大家好我是:"+this.name); // 打印出:大家好我是:小龙哥3 这里的this代表调用该方法的对象16 }17 person3.saySex = function(){18   alert("性别"+this.sex); // 打印出:性别男 这里的this代表调用该方法的对象19 }20 </script>

...    //多的我自己都不想打了

这时候就想,如果有个东西能造出一个对象(人),然后我们直接输入名字就行了...想了半天终于想出个东西---》工厂模式

* 写程序必须想到一件事情--》有重复的代码尽量使用一个函数包装起来,直接调用函数就行了

这时候工厂模式就是用来批量  “造人”  的,哈哈。真能造的话我就在家造人--美女

二:接下来引入工厂模式

 1 <script type="text/javascript"> 2   function createPreason(name,sex){  //他的怪癖,喜欢参数 3      var person= new Object();  //创建一个对象 4      person.name = name; //给对象添加一个name属性 5      person.sex = sex; //给对象添加一个sex属性 6      person.sayName= function(){ 7       alert("大家好我是:"+this.name);  // 打印出:传进来的参数name的真正值      这里的this代表调用该方法的对象 8      } 9      person.saySex= function(){10       alert("性别:"+this.sex);  // 打印出:传进来的参数sex的真正值      这里的this代表调用该方法的对象11      }12     return person;  //返回对象13   }14 15   var p1 = createPreason("小龙哥","男");  //调用工厂模式创建对象p116   var p2 = createPreason("小龙女","女");  //调用工厂模式创建对象p217   p1.sayName(); //打印出 大家好我是:小龙哥18   p1.saySex();  //打印出 性别:男19   p2.sayName(); //打印出 大家好我是:小龙女20   p2.saySex();  //打印出 性别:女21 </script>

我觉得工厂模式的有几个怪癖:

  1.他喜欢参数(这个应该是他的个人爱好,反正我没有这个爱好)

  2.现在需要造人的时候就可以随你造人了

  3.每个对象都会创建这两个函数--浪费

    验证:每次对象里面的函数是否是同一个  alert(p1.sayName == p2.sayName)   //肯定是 false 

 1 <script type="text/javascript"> 2   var a = function(){ //每写一个function就会诞生一个函数对象 3     alert(1); 4   } 5 6   var b = function(){ //每写一个function就会诞生一个函数对象 7     alert(2); 8   } 9     //上面简写,下面才是本质10   var a =new Function("alert(1)"); 11   var b =new Function("alert(2)"); 12   a();13   b();14 </script>

所以:每次通过createPreason()创建对象,对象里面都有2个函数----恩,不说了浪费

该方式是极其简单的模式与写法,要把他弄得很高深,完美(恶心)请看下章