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个函数----恩,不说了浪费

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

  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/andyhxl/p/6066885.html
Copyright © 2011-2022 走看看