前端常见的设计模式

构造函数模式

function Car(speed) {
  this.speed = speed
}
Car.prototype.accelerate = function () {
  return this.speed += 1
}
let run = new Car(0)

混合模式(将父元素的原型链赋值给空对象F,再将空对象F赋值给子元素的原型链来实现继承同时不覆盖子元素的原型链)

let Qq = function (user, password) {
  this.user = user
  this.password = password
}
Qq.prototype.gameId = function () {
  console.log(this.user)
}
let Lol = function (user, password, telphone) {
  Qq.call(this.user, password)
  this.telphone = telphone
}
function mix(parentObj) {
  function F() { }
  F.prototype = parentObj;
  return new F()
};
Lol.prototype = min(Qq.prototype)
Lol.prototype.login = function () {
  console.log('login')
}

工厂模式(每次调用函数都会返回不同的局部变量)

function shop(name) {
  let goods = {
    name: name || 'empty'
  };
  goods.price = function () {
    console.log('the ' + this.name + ' is free')
  }
  return goods
}
let g1 = shop('candy')
let g2 = shop('suger')

单例模式(调用第一次初始化返回值,以后再调用返回值不变)

let Single = (function () {
  let dream
  function init(who) {
    return {
      lover: who
    }
  }
  return {
    createLover: function (who) {
      if (!dream) {
        dream = init(who)
      }
      return dream
    }
  }
})()
Single.createLover('null')
Single.createLover('goddess')

发布订阅模式(自定义组件)

let Event = (function () {
  let evts = {};
  function on(evt, handler) {
    evts[evt] = evts[evt] || []
    evts[evt].push({
      handler: handler
    })
  }
  function fire(evt, args) {
    if (!evts[evt]) {
      return
    }
    for (let i = 0; i < evts[evt].length; i++) {
      evts[evt][i].handler(args)
    }
  }
  function off(evt) {
    delete evts[evt]
  }
  return {
    on: on,
    fire: fire,
    off: off
  }
})()
Event.on('change', function (val) {
  console.log('change...  now val is ' + val);
});
Event.fire('change', 'newchange');
Event.off('changer');
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 工厂模式 将方法属性单独定义,避免重复创建,将公共的属性定义到一个函数中,可以重复使用。 构造函数模式 注意:构造...
    静静的枫叶阅读 3,567评论 1 5
  • 1,javascript 基础知识 Array对象 Array对象属性 Arrray对象方法 Date对象 Dat...
    Yuann阅读 4,624评论 0 1
  • 我所理解的爱,一定是隐忍和舍弃的,而不是给予和获得的。 我总觉得,一份爱的体现,是从个人所能抛弃的东西上来衡量的,...
    异类的微光阅读 3,169评论 0 0
  • 上大学之后第三次离家,我本以为自己已经驾轻就熟了,然而还是有意想不到的情绪冒了出来,还是有一些突然的感想冲击着自己...
    噜噜君噜噜噜阅读 1,702评论 0 0
  • 同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍。 一、 计算机网络体系结构分层 二、 TCP/IP 基础...
    涤生_Woo阅读 65,793评论 38 1,037

友情链接更多精彩内容