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

Posted 叫我小龙哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 = "男"; //给对象添加一个属性 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个函数----恩,不说了浪费

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

 


以上是关于js对象2--工厂模式的由来--杂志的主要内容,如果未能解决你的问题,请参考以下文章

PHP面向对象之选择工厂和更新工厂

js 工厂模式简单模式抽象模式

laravel 服务容器的由来 代码展示

关于js的设计模式(简单工厂模式,构造函数模式,原型模式,混合模式,动态模式)

设计模式总览及工厂模式详解

js面向对象小结(工厂模式,构造函数,原型方法,继承)