前端設(shè)計模式

1.寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。

工廠模式

<script>
    // 缺點:無法知道實例是由哪個構(gòu)造函數(shù)創(chuàng)建的
    function Person(name,age){
        var message = {};
        message.name = name;
        message.age = age;
        message.sayAge = function(){
            console.log(this.age);
        }
        return message
    }
    var Person1 = Person('xiaoming',22);
    Person1.name; //xiaoming
    Person1.age;  //22
    Person1.sayAge();  //22
</script> 

模塊模式

<script>
  var Person = (function(){
     var name = 'xiaoming',
         age = 22;

     function sayAge(){
        console.log(name);
     };

     return {
        name:name,
        age:age,
        sayAge:sayAge
     }
  })()

  Person.name; //xiaoming
  Person.age;  //22
  Person.sayAge();  //xiaoming
</script>

構(gòu)造函數(shù)模式

<script>
  function Person(name,age){
     this.name = name;
     this.age = age;
  };
  Person.prototype.sayAge = function(){
     console.log(this.age)
  };
  var person1 = new Person('xiaoming',22)
  person1.sayAge(); //22
</script>

混合模式==繼承

<script>
    function Person(name,age){
     this.name = name;
     this.age = age;
    };
    Person.prototype.sayAge = function(){
     console.log(this.age);
    };

    function Student(name,age,score){
     Person.call(this,name,age);
     this.score = score
    };

    Student.prototype = Object.create(Person.prototype);
    Student.prototype.constructor = Student;

    Student.prototype.sayScore = function(){
     console.log(this.score);
    };

    var student1 = new Student('xiaoming',22,88);
    student1.sayAge(); //22
    student1.sayScore(); //88
</script>

單例模式

 <script>
      var Person = (function(){
         var temp;
         function init(name,age){
            return {
               name:name,
               age:age,
               sayName:function(){
                  console.log(this.name);
               }
            }
         };
         return {
            createPerson:function(name,age){
               if(!temp){
                  temp = init(name,age);
               }
               return temp;
            }
         }
      }());

      var person1 = Person.createPerson('xiaoming',22);
      var person2 = Person.createPerson('xiaohong',10);
   </script>
Paste_Image.png

發(fā)布訂閱模式

<script>
  var EventCenter = (function(){
      var  events = {};
      function on(evt,handler){
        events[evt] = events[evt] || [];
        events[evt].push({
           handler:handler
        })
      };

      function fire(evt,args){
        if(!events[evt]){
           return;
        }
        for(var i=0;i<events[evt].length;i++){
           events[evt][i].handler(args);
        }
      };

      function off(evt){
        delete events[evt];
      };

      return {
        on:on,
        fire:fire,
        off:off
      }  
  }());

  EventCenter.on('change',function(val){
     console.log('change... now val is' + val);
  });
   EventCenter.on('change',function(val){
     console.log('change2... now val is' + val);
  });
  EventCenter.fire('change','jirengu'); 
  //打印結(jié)果 change... now val isjirengu
  //change2... now val isjirengu
  EventCenter.off('change');

</script>

2.使用發(fā)布訂閱模式寫一個事件管理器,可以實現(xiàn)如下方式調(diào)用

Event.on('change', function(val){
    console.log('change...  now val is ' + val);  
});
Event.fire('change', '杭州');
Event.off('changer');
<script>
  var EventCenter = (function(){
      var  events = {};
      function on(evt,handler){
        events[evt] = events[evt] || [];
        events[evt].push({
           handler:handler
        })
      };

      function fire(evt,args){
        if(!events[evt]){
           return;
        }
        for(var i=0;i<events[evt].length;i++){
           events[evt][i].handler(args);
        }
      };

      function off(evt){
        delete events[evt];
      };

      return {
        on:on,
        fire:fire,
        off:off
      }  
  }());

  EventCenter.on('change',function(val){
     console.log('change... now val is ' + val);
  });
   EventCenter.on('change',function(val){
     console.log('change2... now val is ' + val);
  });
  EventCenter.fire('change','杭州'); 
  //打印結(jié)果 change... now val is 杭州
  //change2... now val is 杭州
  EventCenter.off('change');

</script>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。 構(gòu)造函數(shù)模式 寫一個函數(shù),...
    蕭雪圣閱讀 294評論 0 0
  • 一、構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例 單例模式單例就是保證一個類只有一個實...
    任少鵬閱讀 449評論 0 0
  • 1.寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。 構(gòu)造函數(shù)胡模式(constr...
    饑人谷_NewClass閱讀 454評論 0 1
  • 1.寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。 構(gòu)造函數(shù)模式 構(gòu)造函數(shù)模式是...
    hellowade閱讀 356評論 0 0
  • 寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。 工廠模式(factory) 缺點...
    放風箏的小小馬閱讀 388評論 0 1

友情鏈接更多精彩內(nèi)容