亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

瀏覽:73日期: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
相關文章:
主站蜘蛛池模板: 欧美中文字幕一区 | 亚洲欧洲视频 | 国产亚洲精品久久麻豆 | 丝袜足交在线 | 婷婷月 | 国产精品第二页在线播放 | 欧美日韩视频精品一区二区 | 奇米中文字幕 | 精品免费久久久久久成人影院 | 91亚洲国产系列精品第56页 | 综合久久久久 | 国产美女在线播放 | 51精品资源视频在线播放 | 中文字幕亚洲综合 | 亚洲综合亚洲 | 欧美在线第一二三四区 | 国产精品综合网 | 免费一级特黄欧美大片久久网 | 最新欧美精品一区二区三区不卡 | 欧美a大片欧美片 | 免费中文字幕不卡视频 | 久久久久久一级毛片免费野外 | 国产福利视频精品 | 久久久久综合中文字幕 | 国产欧美精品一区二区三区-老狼 | 91原创视频在线观看 | 丁香五月好婷婷深深爱 | 一级毛片免费的 | 久久99精品久久久久久园产越南 | aaa特级毛片 | 首页国产精品萌社区 | 日本精品中文字幕在线播放 | 成人欧美精品大91在线 | 日韩视频一区二区三区 | 国产chiese在线视频 | 亚洲国产图片 | 日本欧美做爰全免费的视频 | 超级碰碰碰免费视频播放 | 久久久视频在线 | 欧美一级特黄aaaaaa在线看首页 | 欧美一区二区视频三区 |