国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JavaScript設計模式——創建型設計模式

開發 前端
用原型實例指向創建對象的類,適用于創建新的對象的類共享原型對象的屬性以及方法。 簡而言之,就是根據一個基類(原型類)構造出多個子類,將公用方法和屬性保存在原型類中。

簡單工廠模式

抽象各個對象的共同點,加工出最初形態,對于不同點進行獨立設計。

function createBook(name, time, type) {
  //創建一個對象,并對對象拓展屬性和方法
  const o = new Object();
  //共同參數
  o.name = name;
  o.time = time;
  o.getName = function () {
    console.log(this.name);
  }
  //差異性
  if (type === "js") {
    //js類書差異處理
  } else if (type === "css") {
    //css類書差異處理
  } else if (type === "html") {
    //html類書差異處理
  }
  return o;
}

const book1 = createBook('js book', 2014, 'js');
const book2 = createBook('css book', 2013, 'css');
const book3 = createBook('html book', 2012, 'css');

book1.getName();
book2.getName();
book3.getName();

安全工廠模式

安全工廠模式可以屏蔽對類的錯誤使用,如忘記寫new實例化對象避免產生一些非預期的行為。

function Factory(type, content) {
  //如果忘記寫new實例化了,加工重新執行一次
  if (this instanceof Factory) {
    this[type](content);
  } else {
    new Factory(type, content);
  }
}
Factory.prototype = {
  JavaScript: (content) => {
    console.log(content)
  },
  Java: (content) => {
    console.log(content)
  },
}

Factory('JavaScript', 'JavaScript哪家強');
Factory('Java', 'Java哪家強');

建設者模式

顧名思義,結合多個類,創造出結合出來的終極人物(對象)

//創建人類
function Human(param) {
  //技能
  this.skill = param && param.skill || "保密";
  //興趣愛好
  this.hobby = param && param.hobby || "保密";
}
Human.prototype.getSkill = function () {
  return this.skill;
}
Human.prototype.getHobby = function () {
  return this.hobby;
}
//創建姓名類
function Name(name) {
  (function (_this, name) {
    _this.wholeName = name;
    _this.firstName = name.slice(0, name.indexOf(" "));
    _this.secordName = name.slice(name.indexOf(" "));
  })(this, name)
}
//創建職位類
function Work(work) {
  (function (_this, work) {
    switch (work) {
      case "code":
        _this.work = "工程師";
        _this.workDescript = "每天沉醉于編程";
        break;
      case "UI":
      case "UE":
        _this.work = "設計師";
        _this.workDescript = "設計更是一種藝術";
        break;
      case "teach":
        _this.work = "教師";
        _this.workDescript = "分享頁是一種快樂";
        break;
      default:
        _this.work = work;
        _this.workDescript = "對不起,我們還不清楚您所選擇職位的相關描述";
    }
  })(this, work)
}
//創建建設者類
function Person(name, work) {
  var person = new Human();
  person.name = new Name(name);
  person.work = new Work(work);
  return person;
}

const person = new Person("xiao ming", "code");
console.log(person.skill);                  //保密
console.log(person.work.workDescript);      //每天沉醉于編程
console.log(person.name.firstName);         //xiao

這里結合了Humer、Name、Work,最后在Person中構造出了一個應聘者。

原型模式

用原型實例指向創建對象的類,適用于創建新的對象的類共享原型對象的屬性以及方法。 簡而言之,就是根據一個基類(原型類)構造出多個子類,將公用方法和屬性保存在原型類中。

//圖片輪播基類
function LoopImages(imgArr, container) {
  this.imgArr = imgArr;
  this.container = container;
}
LoopImages.prototype = {
  //創建輪播圖片
  createImage: function (img) {
    this.imgArr.push(img);
    console.log('LoopImages createImage function');
  },
  //切換下一張圖片
  changeImage: () => {
    console.log('LoopImages changeImage function');
  }
}
//上下滑動切換類
function SlideLoopImg(imgArr, container) {
  LoopImages.call(this, imgArr, container);
}
SlideLoopImg.prototype = new LoopImages();
//重寫繼承的切換下一張圖片方法
SlideLoopImg.prototype.changeImage = () => {
  console.log('SlideLoopImg changeImage function');
}

//漸隱切換類
function FadeLoopImg(imgArr, container, arrow) {
  LoopImages.call(this, imgArr, container);
  this.arrow = arrow;
}
FadeLoopImg.prototype = new LoopImages();
//重寫繼承的切換下一張圖片方法
FadeLoopImg.prototype.changeImage = () => {
  console.log('FadeLoopImg changeImage function');
}

const fade = new FadeLoopImg([
  '01.jpg',
  '02.jpg',
  '03.jpg',
  '04.jpg'
], 'div', [
  'left.jpg',
  'right.jpg'
])
console.log(fade.arrow);        //['left.jpg','right.jpg']
console.log(fade.imgArr);       //['01.jpg', '02.jpg', '03.jpg', '04.jpg']
fade.createImage('05.jpg');     //LoopImages createImage function
console.log(fade.imgArr);        //['01.jpg', '02.jpg', '03.jpg', '04.jpg', '05.jpg']
fade.changeImage();             //FadeLoopImg changeImage function

可以看到,原型模式可以讓多個對象分享同一個原型對象的屬性與方法,這也是一種繼承方式。 原型對象更加適合在創建復雜的對象時,對于那些需求一直在變化而導致對象結構不停改變時,將那些比較穩定的屬性與方法公共提取,實現繼承,代碼復用。

單例模式

單例模式,顧名思義,一個類只能有一個實例,重復實例化只會返回第一次實例的對象。

靜態變量

通過一個立即執行函數,將所有方法掛載,并且為靜態變量,無法改變。

const React = (function () {
  var react = {
    useState: () => { },
    useEffect: () => { },
    useRef: () => { },
    useMemo: () => { },
    useCallback: () => { },
    useReducer: () => { },
    useContext: () => { }
  }
  return {
    get: function (name) {
      return react[name] || null;
    }
  }
})()

console.log(React.get('useState'))

實例化單例

創建一個立即執行函數,利用閉包,使記錄值常駐在內存中,每次實例化的時候判斷是否為第一次實例化,實現單例。

const React = (function () {
  let instance = null;
  return function (params) {
    if (instance) {
      return instance
    }
    this.params = params;
    return instance = this;
  }
})()

console.log(new React({
  useState: () => { },
  useEffect: () => { },
  useRef: () => { },
  useMemo: () => { },
  useCallback: () => { },
  useReducer: () => { },
  useContext: () => { }
}) === new React('hh'));      //true

惰性單例

非實例化創建方式,也是一種延遲創建的方式。

function React(fns) {
  this.fns = fns;
}
React.instance = null;
React.getFn = function () {
  console.log(this.fns)
}
React.getInstance = function (name) {
  if (!this.instance) {
    return this.instance = new React(name)
  }
  return this.instance
}

console.log(React.getInstance({
  useState: () => { },
  useEffect: () => { },
  useRef: () => { },
  useMemo: () => { },
  useCallback: () => { },
  useReducer: () => { },
  useContext: () => { }
}) === React.getInstance('xx'));    //true

總結

本文介紹了JavaScript中創建型設計模式,希望看過之后對讀者開發中代碼質量有所幫助,有所感悟。

責任編輯:武曉燕 來源: 量子前端
相關推薦

2023-03-27 00:20:48

2012-02-29 09:41:14

JavaScript

2015-09-08 13:39:10

JavaScript設計模式

2012-10-29 11:16:13

2012-05-16 17:15:04

Java設計模式

2021-02-01 10:01:58

設計模式 Java單例模式

2015-11-03 09:43:43

avascript設計模式工廠模式

2012-04-12 09:38:21

JavaScript

2019-08-16 10:46:46

JavaScript工廠模式抽象工廠模式

2023-05-15 15:29:13

設計模式JavaScript

2015-11-12 09:32:03

Javascript設計模式

2021-02-19 14:07:03

JavaScript編程開發

2012-12-25 09:38:41

JavaScript設計模式

2011-09-01 13:51:52

JavaScript

2015-11-25 11:10:45

Javascript設計觀察

2023-05-04 08:47:31

命令模式抽象接口

2022-01-12 13:33:25

工廠模式設計

2020-11-03 13:05:18

命令模式

2020-11-04 08:54:54

狀態模式

2013-11-26 16:09:34

Android設計模式
點贊
收藏

51CTO技術棧公眾號

欧美日韩在线资源| 久久91精品| 久久天堂av综合合色蜜桃网| 国产日韩av高清| 性国产高清在线观看| 亚洲欧美在线另类| 亚洲欧美在线网| 久久精品不卡| 中文字幕综合在线| 超碰超碰在线| 亚洲国产精品视频| 88av.com| 久久精品卡一| 国产精品成人久久久久| 欧美va在线观看| 91精品中文字幕一区二区三区| 成人xxx免费视频播放| 精一区二区三区| 黑人另类av| 欧美久久综合网| 韩日精品中文字幕| 巨大黑人极品videos精品| 日韩精品一区在线| 国产1区2区3区在线| 亚洲精品国产a| 久久久久国产一区| 本田岬高潮一区二区三区| 一区二区三区国产福利| 99亚洲视频| 春色成人在线视频| 综合天堂av久久久久久久| 国产成人精品久久久| 香蕉免费一区二区三区在线观看| 亚洲精品www久久久| 日本不卡在线| 在线亚洲一区二区| 国产一级网站视频在线| 香蕉影视欧美成人| 亚洲日本va中文字幕久久| 亚洲精品高清视频在线观看| 在线观看免费视频高清游戏推荐| 26uuu国产在线精品一区二区| 国产伦精品一区二区三区四区视频_| 九九视频精品免费| 亚洲精品久久久久久久蜜桃臀| 狠狠色狠狠色合久久伊人| 宅男一区二区三区| 久久99国产精品免费| 国产日韩第一页| 丰满白嫩尤物一区二区| 国产成a人亚洲精v品在线观看| 国产v日产∨综合v精品视频| 亚洲精品少妇一区二区| 成人av片在线观看| 久久久久久三级| 亚洲精品综合在线| 神马久久高清| 欧美日韩国产精选| av午夜在线观看| 亚洲品质视频自拍网| 欧美特黄aaaaaaaa大片| 色小说视频一区| 亚洲成人黄色| 日本一区二区在线播放| 四季av在线一区二区三区 | juliaann成人作品在线看| 91小视频在线免费看| 污污的网站18| 一区二区三区精品| 亚洲欧美日本免费| 欧美一区午夜精品| 嫩草伊人久久精品少妇av杨幂| 欧美成人精品xxx| 蜜乳av综合| 精品国产一区二区三| 美女视频黄a大片欧美| 青娱乐自拍偷拍| 亚洲高清免费一级二级三级| 麻豆网在线观看| 中文字幕亚洲专区| 精品国产精品| 日本高清不卡一区二区三| a级精品国产片在线观看| 能在线观看av网站| 日韩无一区二区| 波多野结衣欧美| 激情五月综合色婷婷一区二区| 国产毛片一区二区| 黄a大片av永久免费| 欧美嫩在线观看| 欧美经典一区| 国产高清在线一区| 麻豆精品视频在线观看| 国产视频一二| 亚洲摸下面视频| 99re久久最新地址获取| 老司机午夜网站| 午夜精品久久久久久久| 天堂中文最新版在线中文| 日韩美女主播视频| 久久电影国产免费久久电影| 1234区在线观看视频免费| 日韩欧美在线综合网| 日韩欧美黄色| 亚洲免费视频播放| 精品久久久久久久中文字幕 | 青青草国产精品97视觉盛宴| 热久久精品国产| 3751色影院一区二区三区| 一级毛片精品毛片| 日本一区二区三区免费看| 国产精品久久久久久一区二区三区| 3p在线观看| 日本久久中文字幕| 风间由美性色一区二区三区| 国产玉足榨精视频在线观看| 欧美日本高清一区| 人人爽香蕉精品| 中文有码在线观看| 色悠悠久久88| 久久在线精品| 亚洲综合色视频在线观看| 亚洲欧美国产另类| 亚洲视频二区| 另类av导航| 欧美激情亚洲一区| 国产精品888| 成人午夜在线影视| 亚洲一区二区中文| 日韩美女精品在线| 国模大尺度视频一区二区| 欧洲精品国产| 色综合久久久久| 天海翼亚洲一区二区三区| 高清无码视频直接看| 欧美大胆人体bbbb| 亚洲激情亚洲| 日韩欧美在线观看一区二区| 97国产suv精品一区二区62| 成人性视频免费网站| segui88久久综合| 豆国产97在线| 欧美色视频日本版| 欧美艳星介绍134位艳星| 97在线观看播放| 欧美美最猛性xxxxxx| www.99精品| 欧美国产日韩电影| 久久这里只有精品23| 中文字幕亚洲欧美在线| 高清国产一区二区| www成人在线视频| 欧美成人精品免费| 爱福利视频一区| 久久久一区二区| 日韩激情精品| 国产日韩欧美久久| 欧美一区二区三区……| 国产精品卡一卡二| 深爱激情综合网| 天堂а√在线8种子蜜桃视频| 国产欧美日韩精品丝袜高跟鞋| 综合久久综合久久| 天天躁日日躁狠狠躁欧美巨大小说| 成年人黄色片视频| 国模叶桐国产精品一区| 亚洲视频中文字幕| 欧美成免费一区二区视频| 青青草在线免费视频| 国产精品v欧美精品∨日韩| 911精品产国品一二三产区| 久久一区二区三区超碰国产精品| 婷婷色在线播放| 青春草在线视频免费观看| 在线看日韩欧美| 国产日产欧美精品一区二区三区| 麻豆精品av| 嫩草研究院在线观看| 日本免费一区二区三区| 亚洲欧美国产va在线影院| eeuss国产一区二区三区 | 亚洲日本无吗高清不卡| 亚洲网站在线观看| 中文字幕第一区二区| 国产精品一区二区av交换| 精品亚洲成a人片在线观看| 精品久久久久久乱码天堂| 亚洲激情自拍图| 久久先锋资源网| 精品美女久久久| 黄色视屏免费在线观看| 国产一区二区三区播放| 7m第一福利500精品视频| 91精品91久久久中77777| 青青草97国产精品免费观看无弹窗版| 激情开心成人网| 男生操女生视频网站| 久精品国产欧美| 久久精品99久久久久久久久| 亚洲精品自拍动漫在线|