美文网首页
前端设计模式

前端设计模式

作者: Stay_cool_ | 来源:发表于2017-06-07 22:25 被阅读0次
    1. 写出 构造函数模式、混合模式、模块模式、工厂模式、单例模式、发布订阅模式的范例。
    • 构造函数模式
     function Person(name){
        this.name=name;
      }
    p1 = new Person("小明");
    console.log(p1.name)
    
    • 混合模式
    //用于实现继承
    var Person = function (name,age){
        this.name=name;
        this.age=age;
      }
    var Student = function(name,age,sid){
        Person.call(this,name,age);
        this.sid=sid;
    }
    s1 = new Student("小明","12","007")
     console.log(s1.name)
    
    • 模块模式
    //使用闭包来实现作用域的隔离
    var Person = (function(){ 
        var name = '小明'; 
        function sayName(){ 
            console.log(name); 
        };
    
    return {
     name: name, 
    sayName: sayName
     } 
    })(); 
    
    • 工厂模式
    function createpeople(name){
      var Person = {
        name:name,
        sayName : function(){
          console.log(this.name);
        }
      }
    return Person;
    }
    var p1 = createpeople('小明')
          p2 = createpeople('小红')
    p1.sayName();
    p2.sayName();
    
    • 单例模式
    var person = (function(){
          var instance;
          function init(name){
          return {name:name}
        }
        return createpeople : function(name){
            if(!instance){
              instance=init(name);
            }
        return instance;
        }
    }());
    
    
    • 发布订阅模式
    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);
            }
    
        }
    
        return{
            on:on,
            fire:fire
        }
    })();
    
    EventCenter.on('my_event',function(data){
        console.log('my_event receive...')
    });
    EventCenter.fire('my_event');
    
    1. 使用发布订阅模式写一个事件管理器,可以实现如下方式调用
    var EventCenter = (function(){
        var events = {};
    
        function on(evt,handler){
            events[evt] = events[evt] || [];
            events[evt].push({
                handler:handler
            });
        }
      function off(evt){
            delete events[evt]
        }
        function fire(evt,args){
            if(!events[evt]){
                return;
            }
            for(var i=0;i<events[evt].length;i++){
                events[evt][i].handler(args);
            }
    
        }
    
        return{
            on:on,
            fire:fire,
            off:off
        }
    })();
    Event.on('change', function(val){
        console.log('change...  now val is ' + val);  
    });
    Event.fire('change', '饥人谷');
    Event.off('changer');
    

    相关文章

      网友评论

          本文标题:前端设计模式

          本文链接:https://www.haomeiwen.com/subject/psmefxtx.html