前端設(shè)計(jì)模式

  1. 寫出 構(gòu)造函數(shù)模式、混合模式、模塊模式、工廠模式、單例模式、發(fā)布訂閱模式的范例。
//構(gòu)造函數(shù)模式:new一個(gè)實(shí)例
  function Person(name, age) {
      this.name=name;
      this.age=age;
  }
 Person.prototype.sayName= function () {
    console.log(this.name)
  };
 var person1 = new Person("lisa",30);
//混合模式
    function Person(name, age) {
        this.name=name;
        this.age=age;
    }
    Person.prototype.sayName= function () {
        console.log(this.name)
    };
    function Student(name,age,score) {
        Person.call(this,name,age);
        this.score=score;
    }
    Student.prototype=Object.create(Person.prototype);
    Student.prototype.sayScore = function () {
        console.log(this.score)
    }
    var stuent1= new Student("andy","12","100");
    //模塊模式:通過閉包實(shí)現(xiàn)一個(gè)模塊
    var Person = (function () {
        var name = "ruoyu";
        function sayName() {
            console.log(this.name)
        }
        return {
            name:name,
            sayName:sayName
        }
    })();
    Person.sayName();
//工廠模式:每次返回一個(gè)對(duì)象;
function CreatePerson(name) {
        var person={
            name:name,
            sayName:function () {
                console.log(this.name)
            }
        };
        return person;
    }
CreatePerson("ruoyu").sayName();
//單例模式:應(yīng)用場景=》彈窗
    Person = (function() {
        var instance;
        function init(name) {
            return {name:name}
        }
    return {
        createPerson:function (name) {
            if(!instance){
                instance =  init(name);
            }
            return instance
        }
    }

    })();
    Person.createPerson("andy");//{name: "andy"}
    Person.createPerson("lili");//{name: "andy"}
//發(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("hello",function (name) {
       alert(name)
    });
    EventCenter.fire("hello","456");//alert=>456
    EventCenter.fire("hello","123");//alert=>123
    EventCenter.off("hello");//解除事件
    EventCenter.fire("hello","123");//沒有彈框
  1. 使用發(fā)布訂閱模式寫一個(gè)事件管理器,可以實(shí)現(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', '饑人谷'); //change...  now val is 饑人谷
    Event.off('change');//移除事件

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

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

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

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