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

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

  • 相关阅读:
    Python基础(2)——数据类型:Numbers、列表、元组、字典、字符串、数据运算
    Exadata V2 Pricing
    Oracle网络TNS协议介绍(revised)
    V$LOCK视图显示TX锁没有对应的TM锁的几种可能现象
    Poor Data Export Performance(revised)
    single quote needed in expdp query?
    No way to disable datapump estimate?
    Oracle网络TNS协议的几个基础类描述(revised)
    logfile switch causes incremental checkpoint?
    图文详解安装NetBackup 6.5备份恢复Oracle 10g rac 数据库(修订)
  • 原文地址:https://www.cnblogs.com/andyhxl/p/6066885.html
Copyright © 2020-2023  润新知