zoukankan      html  css  js  c++  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 = "男"; //给对象添加一个属性 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个函数----恩,不说了浪费

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

  • 相关阅读:
    QT+Linux+FFmpeg+C/C++实现RTSP流存储为MP4视频文件
    FFmpeg接收RTSP并将H264保存为MP4
    第一次在此定义 多重定义 multiple definition of
    无法定位程序输入点_ZdaPvj于动态链接库 Qt5Core.dl Qt5Gui.dll上
    QObject::startTimer: QTimer can only be used with threads started with QThread
    ONVIF开发编译时提示stdsoap2.o中multiple definition of 'namespaces'问题的解决
    ONVIF开发(1)生成开发框架
    VUE从入门到放弃(项目全流程)————VUE
    UI库colorui的使用————小程序
    超简单详细的搭建个人网站————静态网站
  • 原文地址:https://www.cnblogs.com/andyhxl/p/6066885.html
Copyright © 2011-2022 走看看