您的位置:首页 > Web前端 > JavaScript

js对象2--工厂模式的由来--杂志

2016-11-15 18:56 204 查看
一:工厂模式引入前提例子

  先看一个案例

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 = "男";       //给对象添加一个属性 sex
14     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("小龙哥","男");   //调用工厂模式创建对象p1
16     var p2 = createPreason("小龙女","女");   //调用工厂模式创建对象p2
17     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个函数----恩,不说了浪费

该方式是极其简单的模式与写法,要把他弄得很高深,完美(恶心)请看下章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐