电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

《javascript設計模式》學習筆記三:Javascript面向對象程序設計單例模式原理與實現方法分析

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

本文實例講述了Javascript面向對象程序設計單例模式原理與實現方法。分享給大家供大家參考,具體如下:

1.單例模式概述

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

單例模式的意思就是只有一個實例。單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統提供這個實例。這個類稱為單例類。

在javascript的世界里,其實沒有嚴格的對象和類定義,“一切皆對象”使得javascript中都是對象,不能像java,c++或者php使用特定的方法返回一個實例來實現,因此對javascript來說,我們要創造的是一個“不能被多次實例化的”對象,也就是說只能實例化一次的對象。

2.簡單單例模式:

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

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

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

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

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

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

還記得匿名函數嗎?通常在使用閉包的時候會使用,改進之后如下:

var singleton = (function(){ var private_attribute = ’’; functioin private_method(){} return { public_attribute:’’, public_method:function(){} };})();4.惰性加載(lazy loading,延遲加載)單例模式

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

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(){} };})();

這樣調用一個單例對象的方法:

singleton.getinstance().publicmethod();

這樣只有在調用方法或引用屬性的時候才會真正的創建unique對象,就是使用的時候比較麻煩:)

5.簡單mvc代碼風格

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

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

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

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

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 游动电流仪-流通式浊度分析仪-杰普仪器(上海)有限公司 | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china | 伊卡洛斯软装首页-电动窗帘,别墅窗帘,定制窗帘,江浙沪1000+别墅窗帘案例 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 旋转/数显粘度计-运动粘度测定仪-上海平轩科学仪器 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | 缠膜机|缠绕包装机|无纺布包装机-济南达伦特机械设备有限公司 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | pbootcms网站模板|织梦模板|网站源码|jquery建站特效-html5模板网 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 生物风-销售载体,基因,质粒,ATCC细胞,ATCC菌株等,欢迎购买-百风生物 | 工业铝型材生产厂家_铝合金型材配件批发精加工定制厂商 - 上海岐易铝业 | 花纹铝板,合金铝卷板,阴极铝板-济南恒诚铝业有限公司 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 2-羟基泽兰内酯-乙酰蒲公英萜醇-甘草查尔酮A-上海纯优生物科技有限公司 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 郑州外墙清洗_郑州玻璃幕墙清洗_郑州开荒保洁-河南三恒清洗服务有限公司 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | 即用型透析袋,透析袋夹子,药敏纸片,L型涂布棒-上海桥星贸易有限公司 | 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 | 分类168信息网 - 分类信息网 免费发布与查询 | 北京模型公司-军事模型-工业模型制作-北京百艺模型沙盘公司 | 环氧树脂地坪_防静电地坪漆_环氧地坪漆涂料厂家-地壹涂料地坪漆 环球电气之家-中国专业电气电子产品行业服务网站! | 电动葫芦|防爆钢丝绳电动葫芦|手拉葫芦-保定大力起重葫芦有限公司 | 小小作文网_中小学优秀作文范文大全| 安徽泰科检测科技有限公司【官方网站】 | 品牌广告服务平台,好排名,好流量,好生意。 | IP检测-检测您的IP质量| SPC工作站-连杆综合检具-表盘气动量仪-内孔缺陷检测仪-杭州朗多检测仪器有限公司 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 隔爆型防爆端子分线箱_防爆空气开关箱|依客思 | 油液红外光谱仪-油液监测系统-燃油嗅探仪-上海冉超光电科技有限公司 | 数控走心机-走心机价格-双主轴走心机-宝宇百科 | 北京京云律师事务所 | 生物风-销售载体,基因,质粒,ATCC细胞,ATCC菌株等,欢迎购买-百风生物 | 合肥通道闸-安徽车牌识别-人脸识别系统厂家-安徽熵控智能技术有限公司 |