最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

《javascript設(shè)計(jì)模式》學(xué)習(xí)筆記三:Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)單例模式原理與實(shí)現(xiàn)方法分析

 更新時(shí)間:2020年04月07日 11:28:10   作者:silentime  
這篇文章主要介紹了Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)單例模式原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了《javascript設(shè)計(jì)模式》中Javascript面向?qū)ο髥卫J较嚓P(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)單例模式原理與實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

1.單例模式概述

源自百度百科對于單例模式的定義:

單例模式的意思就是只有一個(gè)實(shí)例。單例模式確保某一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。這個(gè)類稱為單例類。

在javascript的世界里,其實(shí)沒有嚴(yán)格的對象和類定義,“一切皆對象”使得javascript中都是對象,不能像java,c++或者php使用特定的方法返回一個(gè)實(shí)例來實(shí)現(xiàn),因此對javascript來說,我們要?jiǎng)?chuàng)造的是一個(gè)“不能被多次實(shí)例化的”對象,也就是說只能實(shí)例化一次的對象。

2.簡單單例模式:

只能實(shí)例化一次的對象也就可以使用“對象字面量”的定義方式來實(shí)現(xiàn):

var singleton = {
  attribute:'',
  method:function(){}
}

這樣定義的對象,不能使用new singleton的方式來生成另外的對象(不存在prototype和constructor屬性)。

3.包含私有成員的單例模式:

如果看過之前的我寫的關(guān)于類成員的文章,自然的我們就能想到用閉包來實(shí)現(xiàn),既然要用的閉包,那么一定會(huì)用到函數(shù)和函數(shù)返回值,于是,這樣的單例模式如下:

var singleton = function(){
  var private_attribute = '';
  functioin private_method(){}
  return {
   public_attribute:'',
   public_method:function(){}
  };
}

還記得匿名函數(shù)嗎?通常在使用閉包的時(shí)候會(huì)使用,改進(jìn)之后如下:

var singleton = (function(){
  var private_attribute = '';
  functioin private_method(){}
  return {
   public_attribute:'',
   public_method:function(){}
  };
})();

4.惰性加載(lazy loading,延遲加載)單例模式

2,3中所示單例模式定義方式都是在定義時(shí)創(chuàng)建的單例,這樣很浪費(fèi)內(nèi)存,如何能在使用的時(shí)候才創(chuàng)建(lazy loading,更多的用于圖片的延遲加載)呢?所謂惰性加載,也就是先定義,然后在某個(gè)地方才創(chuàng)建對象,所以必須要使用函數(shù),我們知道在java或者php中單例模式通常使用一個(gè)靜態(tài)方法來創(chuàng)建,同理,我們再改進(jìn)一下閉包形式的定義式:

var singleton = (function(){
  var unique;
  function getinstance(){
    if(!unique){
      unique = construct();
      return unique;
    }
  }
  function construct(){
    var private_member;
    function private_method(){}
    return {//這里才是真正的單例對象
      public_member:'',
      public_method:function(){}
    };
})();

這樣調(diào)用一個(gè)單例對象的方法:

singleton.getinstance().publicmethod();

這樣只有在調(diào)用方法或引用屬性的時(shí)候才會(huì)真正的創(chuàng)建unique對象,就是使用的時(shí)候比較麻煩:)

5.簡單mvc代碼風(fēng)格

順便在這里分享一下我寫js的一個(gè)簡單風(fēng)格,盡管js是一個(gè)前臺代碼,但是就其本身而言,也可以將它的內(nèi)容分為mvc(model,controller,view,關(guān)于mvc的概念請baidu/google),因此在寫一個(gè)頁面的js代碼的時(shí)候,我會(huì)這么寫:

//函數(shù)封裝在此
var controller = {
  init:function(){}
};
//頁面相關(guān)內(nèi)容封裝在此
var view = {
  table:{},
  banner:{},
  foot:{}
};
//數(shù)據(jù)相關(guān)內(nèi)容封裝在此
var model = {
  table_data:{}
}

在頁面onload的時(shí)候調(diào)用controoler.init();完成初始化工作(數(shù)據(jù)加載,頁面渲染,事件監(jiān)聽等),這樣寫的目的是盡量將一些相同的邏輯組織在一起,方便查找和修改,目前只是一個(gè)雛形,希望在看完《javascript設(shè)計(jì)模式》這本書之后能寫一個(gè)輕量級的模型出來^_^

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • js檢測用戶輸入密碼強(qiáng)度

    js檢測用戶輸入密碼強(qiáng)度

    這篇文章主要為大家詳細(xì)介紹了js如何實(shí)現(xiàn)檢測用戶輸入密碼強(qiáng)度,從四個(gè)方面檢測用戶輸入的密碼的強(qiáng)度的,感興趣的小伙伴們可以參考一下
    2015-10-10
  • 今天,小程序正式支持 SVG

    今天,小程序正式支持 SVG

    這篇文章主要介紹了小程序支持SVG,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • javascript url幾種編碼方式詳解

    javascript url幾種編碼方式詳解

    下面小編就為大家?guī)硪黄猨avascript url幾種編碼方式詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • js頁面加載后執(zhí)行的幾種方式小結(jié)

    js頁面加載后執(zhí)行的幾種方式小結(jié)

    在實(shí)際應(yīng)用中往往需要在頁面加載完畢之后再去執(zhí)行相關(guān)的js代碼,之所以這么操作是有道理的,如果是操作dom元素,如果相關(guān)元素沒有加載完成,而去執(zhí)行js代碼,可能會(huì)導(dǎo)致錯(cuò)誤
    2020-01-01
  • 淺談關(guān)于JS下大批量異步任務(wù)按順序執(zhí)行解決方案一點(diǎn)思考

    淺談關(guān)于JS下大批量異步任務(wù)按順序執(zhí)行解決方案一點(diǎn)思考

    這篇文章主要介紹了淺談關(guān)于JS下大批量異步任務(wù)按順序執(zhí)行解決方案一點(diǎn)思考,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • js函數(shù)setTimeout延遲執(zhí)行的簡單介紹

    js函數(shù)setTimeout延遲執(zhí)行的簡單介紹

    設(shè)置指定的JS函數(shù)在指定的時(shí)間后執(zhí)行,可以利用setTimeout()函數(shù)。
    2013-07-07
  • 基于jquery實(shí)現(xiàn)的省市區(qū)級聯(lián)無ajax

    基于jquery實(shí)現(xiàn)的省市區(qū)級聯(lián)無ajax

    省市區(qū)級聯(lián)的實(shí)現(xiàn)方法有很多,在本文為大家介紹下如何使用jquery無ajax來實(shí)現(xiàn),感興趣的朋友可以參考下,希望對大家有所幫助
    2013-09-09
  • JS實(shí)現(xiàn)的自定義水平滾動(dòng)字體插件完整實(shí)例

    JS實(shí)現(xiàn)的自定義水平滾動(dòng)字體插件完整實(shí)例

    這篇文章主要介紹了JS實(shí)現(xiàn)的自定義水平滾動(dòng)字體插件,以完整實(shí)例形式分析了javascript自定義水平滾動(dòng)字體插件的定義、原理與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • form表單轉(zhuǎn)Json提交的方法(推薦)

    form表單轉(zhuǎn)Json提交的方法(推薦)

    下面小編就為大家?guī)硪黄猣orm表單轉(zhuǎn)Json提交的方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • js中forEach,for in,for of循環(huán)的用法示例小結(jié)

    js中forEach,for in,for of循環(huán)的用法示例小結(jié)

    這篇文章主要介紹了js中forEach,for in,for of循環(huán)的用法,結(jié)合實(shí)例形式總結(jié)分析了js中forEach,for in,for of循環(huán)相關(guān)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03

最新評論

荣成市| 南部县| 库尔勒市| 镇沅| 施甸县| 深水埗区| 阜阳市| 扶余县| 潮安县| 汕尾市| 石家庄市| 竹北市| 万年县| 抚远县| 汨罗市| 崇仁县| 青冈县| 额敏县| 四平市| 永川市| 长岛县| 自治县| 扎赉特旗| 马龙县| 新邵县| 巴彦淖尔市| 津南区| 广元市| 嘉义市| 恩平市| 永寿县| 睢宁县| 尉氏县| 岫岩| 陵水| 土默特左旗| 竹山县| 新兴县| 嘉义县| 图木舒克市| 顺义区|