javascript設(shè)計(jì)模式 – 原型模式原理與應(yīng)用實(shí)例分析
本文實(shí)例講述了javascript設(shè)計(jì)模式 – 原型模式原理與應(yīng)用。分享給大家供大家參考,具體如下:
介紹:在日常的開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)利用到前端模板引擎來(lái)做頁(yè)面渲染,因?yàn)榇嬖诤芏囗?yè)面結(jié)構(gòu)相同,內(nèi)容不同的場(chǎng)景。這種場(chǎng)景在js層面也會(huì)遇到,
很多組件存在相同或者類似,重復(fù)的創(chuàng)建會(huì)導(dǎo)致系統(tǒng)的消耗,這就要用到原型模式了。將相似內(nèi)容提取出來(lái)作為原型類,創(chuàng)建具體類時(shí)需要對(duì)原型類進(jìn)行復(fù)制然后擴(kuò)展。
需要注意的是,復(fù)制出來(lái)的對(duì)象在進(jìn)行修改時(shí)不會(huì)影響到原型類,二者相互獨(dú)立。
定義:使用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)克隆這些原型創(chuàng)建新的對(duì)象。原型模式是一種對(duì)象創(chuàng)建型模式。
場(chǎng)景:我們還是基于Dialog類來(lái)實(shí)現(xiàn)原型模式,我將所有彈窗共有的屬性方法抽取出來(lái),每次創(chuàng)建時(shí)通過(guò)復(fù)制其基礎(chǔ)屬性,在此基礎(chǔ)上進(jìn)行完善,然后返回新的對(duì)象。
示例:
var Dialog = function(){ this.init = function(arg){ this.element = arg.element; this.name = arg.name; } this.show = function(){ console.log(this.name + ' is show -> ' + this.element); } }; var createDialog = function(arg){ var _dialog = function(){}; _dialog.prototype = new Dialog(); var resDia = new _dialog(); resDia.init(arg); return resDia; } var notice = createDialog({name:'notice',element:'<div>notice</div>'}); var toast = createDialog({name:'toast',element:'<div>toast</div>'}); var warnin = createDialog({name:'warnin',element:'<div>warnin</div>'}); notice.show(); //notice is show -> <div>notice</div> toast.show(); //toast is show -> <div>toast</div> warnin.show(); //warnin is show -> <div>warnin</div>
原型模式總結(jié):
優(yōu)點(diǎn):
* 當(dāng)創(chuàng)建新的對(duì)象實(shí)例較為復(fù)雜時(shí),使用原型模式可以簡(jiǎn)化對(duì)象的創(chuàng)建過(guò)程,通過(guò)復(fù)制一個(gè)已有實(shí)例可以提高新實(shí)例的創(chuàng)建效率。
* 擴(kuò)展性較好
缺點(diǎn):
* 對(duì)已有類進(jìn)行改造時(shí)需要修改源代碼,違背了開(kāi)關(guān)原則。
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(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é)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
Javascript 同時(shí)提交多個(gè)Web表單的方法
1 問(wèn)題來(lái)自一位網(wǎng)友的提問(wèn): web頁(yè)面里有多個(gè)表單,每個(gè)表單對(duì)應(yīng)著某一類數(shù)據(jù)操作。2009-02-02微信小程序?qū)㈨?yè)面按鈕懸浮固定在底部的實(shí)現(xiàn)代碼
這篇文章主要介紹了微信小程序?qū)㈨?yè)面按鈕懸浮固定在底部的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10JSON基本語(yǔ)法及與JavaScript的異同實(shí)例分析
這篇文章主要介紹了JSON基本語(yǔ)法及與JavaScript的異同,結(jié)合實(shí)例形式分析了json簡(jiǎn)單值、對(duì)象、數(shù)組三種類型值使用技巧,需要的朋友可以參考下2019-01-01suggestion開(kāi)發(fā)小結(jié)以及對(duì)鍵盤事件的總結(jié)(針對(duì)中文輸入法狀態(tài))
suggestion開(kāi)發(fā)小結(jié)以及對(duì)鍵盤事件的總結(jié)(針對(duì)中文輸入法狀態(tài)),需要的朋友可以參考下。2011-12-12bootstrap-paginator服務(wù)器端分頁(yè)使用方法詳解
這篇文章主要為大家詳細(xì)介紹了bootstrap-paginator服務(wù)器端分頁(yè)的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02javascript DIV實(shí)現(xiàn)跟隨鼠標(biāo)移動(dòng)
這篇文章主要為大家詳細(xì)介紹了javascript DIV跟隨鼠標(biāo)移動(dòng),有一個(gè)div跟隨鼠標(biāo)移動(dòng)的結(jié)果,有一連串跟隨鼠標(biāo)移動(dòng)的效果,感興趣的小伙伴們可以參考一下2016-02-02js Math數(shù)學(xué)簡(jiǎn)單使用操作示例
這篇文章主要介紹了js Math數(shù)學(xué)簡(jiǎn)單使用,結(jié)合實(shí)例形式分析了js Math數(shù)學(xué)相關(guān)函數(shù)的基本用法與操作注意事項(xiàng),需要的朋友可以參考下2020-03-03