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

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

JavaScript代理模式原理與用法實例詳解

瀏覽:123日期:2023-11-07 15:28:40

本文實例講述了JavaScript代理模式原理與用法。分享給大家供大家參考,具體如下:

代理模式的定義,代理是一個對象(proxy)用它來控制目標對象的訪問。為此他要是先與目標對象相同的接口,但是他不同于裝飾者模式,它對目標對象不進行任何修改,它的目的在于延緩'復雜'對象的初始化時間。這樣可以在用到這個目標對象的時候再初始化他(對于單例來講更是重要)。

代理模式有兩種分類:

(1)普通代理

(2)惰性代理

具體看下面的例子

第一,普通代理模式

步驟一,接口檢驗文件的引用

//定義一個靜態方法來實現接口與實現類的直接檢驗//靜態方法不要寫出Interface.prototype ,因為這是寫到接口的原型鏈上的//我們要把靜態的函數直接寫到類層次上//定義一個接口類var Interface=function (name,methods) {//name:接口名字 if(arguments.length<2){ alert('必須是兩個參數') } this.name=name; this.methods=[];//定義一個空數組裝載函數名 for(var i=0;i<methods.length;i++){ if(typeof methods[i]!='string'){ alert('函數名必須是字符串類型'); }else { this.methods.push( methods[i]); } }};Interface.ensureImplement=function (object) { if(arguments.length<2){ throw new Error('參數必須不少于2個') return false; } for(var i=1;i<arguments.length;i++){ var inter=arguments[i]; //如果是接口就必須是Interface類型 if(inter.constructor!=Interface){ throw new Error('如果是接口類的話,就必須是Interface類型'); } //判斷接口中的方法是否全部實現 //遍歷函數集合分析 for(var j=0;j<inter.methods.length;j++){ var method=inter.methods[j];//接口中所有函數 //object[method]傳入的函數 //最終是判斷傳入的函數是否與接口中所用函數匹配 if(!object[method]||typeof object[method]!='function' ){//實現類中必須有方法名字與接口中所用方法名相同throw new Error('實現類中沒有完全實現接口中的所有方法') } } }}

步驟二,目標類

(1)圖書類

//圖書類 /* * bid 圖書id * bName 圖書名稱 * bPrice 圖書價格 * */ var Book = function(bid,bName,bPrice){ this.bid = bid; this.bName = bName; this.bPrice = bPrice; }

(2)真正的目標類

//目標類 var myBookShop=(function () { //書店里的書 var books={}; return function (bks) { //初始化 if(typeof bks=='object'){ books=bks; } //加書 this.addBook = function(book){ books[book.bid] = book; } //找書 this.findBook=function (bid) { if(books[bid]){ return books[bid]; }else { return null; } } //還書 this.returnBook=function (book) {this.addBook(book); } //借書 this.lendBook=function (bid) {var book=this.findBook(bid);return book; } } })();

步驟三,普通代理

var myBookShopProxy=function (bks) { var obj=new myBookShop(bks);//類似于目標類的引用 //加書 this.addBook=function (book) { obj.addBook(book); } //找書 this.findBook = function(bid){ return obj.findBook(bid); } //還書this.returnBook=function (book) { obj.returnBook(book);} //借書 this.lendBook=function (bid) { return obj.lendBook(bid); } }

步驟四,添加數據后,開始訪問

var proxy = new myBookShopProxy({ '001':new Book('001','EXTJS','45'), '002':new Book('002','JS','60') }) alert(proxy.lendBook('001').bName)

在普通的代理模式中,我們可以看出代理中對目標對象的引用是一次性初始化的,然后再在該基礎上實現其他操作

如圖:目標類和代理同時實現了同一接口。代理中一次性對目標類進行實例,然后值訪問到目標類中的方法。

JavaScript代理模式原理與用法實例詳解

總結,這個代理是我們嚴格安裝定義來寫的,一般開發中不會用到,應為他沒什么意義。

第二種,惰性代理----在使用時才對目標類進行初始化再引用。

對代理部分的修改如下,其余部分相同,代碼如下

//惰性代理---在使用時在初始化目標類的引用 var myBookShopProxy=function (bks) { var obj=null; this._init=function () { obj=new myBookShop(bks); } //加書 this.addBook=function (book) { this._init(); obj.addBook(book); } //找書 this.findBook=function (bid) { this._init(); obj.findBook(bid); } //還書 this.returnBook=function (book) { this._init(); obj.returnBook(book); } //借書 this.lendBook=function (bid) { this._init(); return obj.lendBook(bid); } }

修改后的代理執行過程,如圖

JavaScript代理模式原理與用法實例詳解

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

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

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

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 全自动翻转振荡器-浸出式水平振荡器厂家-土壤干燥箱价格-常州普天仪器 | 粘度计NDJ-5S,粘度计NDJ-8S,越平水分测定仪-上海右一仪器有限公司 | 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | 行吊_电动单梁起重机_双梁起重机_合肥起重机_厂家_合肥市神雕起重机械有限公司 | 中药二氧化硫测定仪,食品二氧化硫测定仪|俊腾百科 | 颗粒机,颗粒机组,木屑颗粒机-济南劲能机械有限公司 | 电缆接头-防爆电缆接头-格兰头-金属电缆接头-防爆填料函 | 旋转/数显粘度计-运动粘度测定仪-上海平轩科学仪器 | 企业微信营销_企业微信服务商_私域流量运营_艾客SCRM官网 | 北京公寓出租网-北京酒店式公寓出租平台 | 液压油缸-液压缸厂家价格,液压站系统-山东国立液压制造有限公司 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | 土壤水分自动监测站-SM150便携式土壤水分仪-铭奥仪器 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 台式恒温摇床价格_大容量恒温摇床厂家-上海量壹科学仪器有限公司 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 杭州成人高考_浙江省成人高考网上报名 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 高低温老化试验机-步入式/低温恒温恒湿试验机-百科 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 专业的压球机生产线及解决方案厂家-河南腾达机械厂 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 自动气象站_气象站监测设备_全自动气象站设备_雨量监测站-山东风途物联网 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 自动配料系统_称重配料控制系统厂家 | 管形母线,全绝缘铜管母线厂家-山东佰特电气科技有限公司 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 | 合肥活动房_安徽活动板房_集成打包箱房厂家-安徽玉强钢结构集成房屋有限公司 | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 硬质合金模具_硬质合金非标定制_硬面加工「生产厂家」-西迪技术股份有限公司 | 派财经_聚焦数字经济内容服务平台 | 直流电能表-充电桩电能表-导轨式电能表-智能电能表-浙江科为电气有限公司 | 长沙广告公司_制作,长沙喷绘_发光字_招牌制作_长沙泓润广告官网 长城人品牌官网 | MES系统-WMS系统-MES定制开发-制造执行MES解决方案-罗浮云计算 | 玻璃钢型材_拉挤模具_玻璃钢拉挤设备——滑县康百思 | 万濠投影仪_瑞士TRIMOS高度仪_尼康投影仪V12BDC|量子仪器 | 代办建筑资质升级-建筑资质延期就找上海国信启航 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 |