色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:86日期:2023-11-06 09:41:08

本文實(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),既然要用的閉包,那么一定會用到函數(shù)和函數(shù)返回值,于是,這樣的單例模式如下:

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

還記得匿名函數(shù)嗎?通常在使用閉包的時(shí)候會使用,改進(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í)候才會真正的創(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í)候,我會這么寫:

//函數(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ì)有所幫助。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 久久久久久久久久免费视频 | 日本美女一区二区三区 | 成人欧美一区二区三区 | 亚洲天堂男人在线 | 久草在线视频免费看 | 99久久精品久久久久久婷婷 | cao在线| 欧美一级永久免费毛片在线 | 成人一区视频 | 国产片一级aaa毛片视频 | 在线亚洲一区二区 | 泷泽萝拉亚洲精品中文字幕 | 久久久小视频 | 欧美日韩国产成人精品 | 国产精品免费视频一区一 | 亚洲品质自拍网站 | 国产日韩精品视频一区二区三区 | 欧洲欧美成人免费大片 | 手机看片精品国产福利盒子 | 成人在线中文字幕 | 老妇综合久久香蕉蜜桃 | 亚洲日本中文字幕在线 | 亚洲国产欧美在线人成精品一区二区 | 草草免费观看视频在线 | 欧美视频在线观看一区二区 | 亚洲美女综合网 | 美女黄视频在线 | 亚洲 欧美 激情 另类 自拍 | 波多野结衣在线观看高清免费资源 | 国产精品福利视频萌白酱 | 亚洲天堂视频在线观看免费 | 玖玖爱zh综合伊人久久 | 玖草影院 | 手机看片国产 | 大陆精品自在线拍国语 | 日本视频在线观看不卡高清免费 | 欧美日韩精品乱国产538 | 手机看片av | 91热久久免费精品99 | 国产乱码精品一区二区三区四川人 | 欧美日韩视频一区二区三区 |