美文网首页
前端设计模式

前端设计模式

作者: GaoYangTongXue丶 | 来源:发表于2017-05-08 21:28 被阅读56次

    构造函数模式

    function Person(name) {
        this.name = name;
    }
    
    Person.prototype.sayName = function(){
        console.log(this.name)
    }
    
    var person = new Person('gaoyang')
    person.sayName();
    

    混合模式

    function Person(name) {
        this.name = name;
    }
    
    Person.prototype.sayName = function(){
        console.log(this.name)
    }
    
    function Student(name,age) {
        Person.call(this,name);
        this.age = age;
    }
    Student.prototype = Object.create(Person.prototype)
    Student.prototype.sayAge = function(){
        console.log(this.age)
    }
    
    var student = new Student('gaoyang','18')
    student.sayName();
    student.sayAge();
    

    模块模式

    var Person = (function(){
         var name = 'gaoyang'
         function sayName() {
             console.log(name);
         }
         return {
             name: name,
             sayName: sayName
         }
    })()
    Person.sayName()
    

    工厂模式

    function createPerson(obj){
         var name = obj.name||'gaoyang'
         function sayName() {
             console.log(obj.name);
         }
         return {
             name: name,
             sayName: sayName
         }
    }
    var person = createPerson({name: 'gaoyang'})
    person.sayName();
    

    单例模式

    var Person = (function(){
        var instance;
        function init(){
            return {name: 'gaoyang'}
        }
        function getInstance() {
           if(!instance){
             instance = init();
           }
           return instance;
        }
        return {
            getInstance: getInstance
        }
    })()
    console.log(Person.getInstance() === Person.getInstance())
    

    发布订阅模式

    var Person = (function(){
        var events = {};
        var oneEvent = {};
        function on(event,handle){
            events[event] = events[event] || [];
            events[event].push({handle:handle})
        }
        function one(event,handle) {
            oneEvent[event] = events[event] || [];
            oneEvent[event] = {handle : handle}
        }
        function performance(event,name) {
           if(events[event].length === 0){
               return;
           }
           for(var i = 0;i<events[event].length; i++){
               events[event][i].handle(name)
           }
        }
        function performanceOne(event,name) {
           if(oneEvent[event].length === 0){
               return;
           }
           
           oneEvent[event].handle(name)
           
        }
        return {
            on: on,
            one: one,
            performance: performance,
            performanceOne: performanceOne
        }
    })()
    
    Person.on('myEvent',function(name){
      console.log(name)
    })
    Person.on('myEvent',function(name){
      console.log(name)
    })
    Person.one('myEvent2',function(name){
      console.log(name)
    })
    Person.one('myEvent2',function(name){
      console.log(name)
    })
    Person.performance('myEvent','gaoyang')
    Person.performanceOne('myEvent2','gaoyang2')
    

    任务2

    var Event = (function () {
       var events = {};
       function on(event,handle) {
           events[event] = events[event] || [];
           events[event].push({handle:handle})
       }
       function off(event) {
          events[event] = [];
       }
       function fire(event,data){
           if(events[event].length === 0){
               return;
           }
           for(var i=0;i<events[event].length;i++){
               events[event][i].handle(data)
           }
       }
       return {
           on: on,
           off: off,
           fire: fire
       }
         
    })()
    
    
    
    
    Event.on('change', function(val){
        console.log('change...  now val is ' + val);  
    });
    Event.fire('change', '饥人谷');
    
    //不执行它,会打印三次,第一个fire执行一次,第二个执行两次  ,,,,加上他执行两次,第一次执行完就置空了
    Event.off('change');
    
    Event.on('change', function(val){
        console.log('change...  now val is ' + val);  
    });
    Event.fire('change', '饥人谷');
    

    相关文章

      网友评论

          本文标题:前端设计模式

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