前端設(shè)計模式

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

  • 構(gòu)造函數(shù)模式
var person = function(name,age){
    this.name = name;
    this.age = age;
    console.log(this.name,this.age);
}
var a = new person("小明",18) 
  • 混合模式
var Person = function(name,age){
    this.name = name;
    this.age = age;
    console.log(this.name,this.age);
}
Person.prototype.sayNameAge = function(){
    console.log('my name is ' + this.name + ',' + this.age + 'years old')
}
var Student = function(name,age,subject){
    Person.call(this,name,age);
    this.subject = subject;
}
Student.prototype.saySubject = function(){
    console.log('I like' + this.subject);
}
/*function create (parentObj){
    function F(){}
    F.prototype = parentObj;
    return new F();
};*/
var a = new Student('小明',18,'哲學(xué)');
console.log(a.saySubject());
  • 模塊模式
var Person = (function(){
    var name = '小明';
    function sayName(){
        console.log(name);
    }
    function changeName(newName){
                name = newName
        }
    return {
        name: name,
                changeName : changeName,
        sayName: sayName
    }
})()
Person.sayName();
Person.changeName('小黑');
Person.sayName();
  • 工廠模式
   function createPerson(opts){
     var person = {
       name: opts.name||'hunger',
       age: opts.age||20
     };
     person.sayNameAge = function(){
       console.log(this.name,this.age);
     }
     return person;
   }
   var p1 = createPerson({name:'小明',age : 18});
    var p2 = createPerson({name:'小王'});
  • 單例模式
var People = (function(){
    var instance;
    function init(name) {
        
        return {
            name : name
        };
    }
    return {
        createPeople: function(name) {
            if (!instance) {
                instance = init(name);
            }
            return instance;
        }
    };
}());
People.createPeople('小明'); //{name :小明}
People.createPeople('123'); //{name :小明}
  • 發(fā)布訂閱模式
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(name){
    delete events[name];
  }
  return {
    on: on,
    fire: fire,
    off: off
  }
})();
EventCenter.on('my_event', function(data){
  console.log('my_event received...');
});
EventCenter.on('my_event', function(data){
  console.log('my_event2 received...');
});
EventCenter.fire('my_event');// my_event received... , my_event2 received...   undefined
EventCenter.off('my_event'); // undefined

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

Event.on('change', function(val){
    console.log('change...  now val is ' + val);  
});
Event.fire('change', '饑人谷');
Event.off('changer');
var Event = (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(name){
    delete events[name];
  }
  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');
?著作權(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ù),...
    蕭雪圣閱讀 288評論 0 0
  • 一、構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例 單例模式單例就是保證一個類只有一個實...
    任少鵬閱讀 443評論 0 0
  • 1.寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。 構(gòu)造函數(shù)胡模式(constr...
    饑人谷_NewClass閱讀 446評論 0 1
  • 1.寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。 構(gòu)造函數(shù)模式 構(gòu)造函數(shù)模式是...
    hellowade閱讀 342評論 0 0
  • 寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。 工廠模式(factory) 缺點...
    放風(fēng)箏的小小馬閱讀 387評論 0 1

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