我的JavaScript设计模式
来源:互联网 发布:linux中oracle启动监听 编辑:程序博客网 时间:2024/04/30 05:10
前言
JavaScript的设计模式有很多,比较常用的是单例模式、模块模式和观察者模式。这里不一一介绍这些模式的用法和场景。记住,设计模式没有好坏,只有适合不适合。下面简单介绍一下我研究出来的一种JavaScript编码模式,这个模式牛逼谈不上,但是用来管理你的前端项目还是挺方便,感兴趣的同学往下看。
针对单页应用
单页应用实现的原理是通过JavaScript控制页面的显示和隐藏,好看点的话再加点转场效果。
这里我还是以单例模式为入口,因为单例模式的性能还是挺不错的,而且容易看懂。
var index={ /*下面定义单例模式下需要‘全局’调用的变量*/ APIURL: 'http://.....com', sStorage:window.sessionStorage, lStorage:window.localStrorage, pageCode: 0, pageStack: [], /** * [页面容器] * @type {Object} */ pageContainer: { home: { selector: '#page-index', sub: false, code: 0 }, activity:{ selector:'#page-activity', sub:false, code:18 } } }; /*下面开始定义整个应用里独立的模块,注意一下:单页应用通常是以页面分模块,通用的功能写在util模块里*/ /** * [工具模块] * @param {[type]} $ [jQuery对象(加快jQuery选择器速度)] * @param {[type]} self [单例上下文] */ index.Module_util=function($,self){ /*封装模块下的私有变量*/ var _wraper=$('.ui-page'); /*封装私有的方法*/ function doSomething(){ //..... } /*可供外部调用的公共方法*/ return{ /** * [过滤空对象] * @param {[type]} obj [要过滤的对象] * @return {[type]} [对象自身或空字符串] */ filterNull: function(obj) { if (obj) { if(obj=="undefined"){ return ''; }else{ return obj; } } else { return ''; } } //....... }; }; /** * [首页模块] * @param {[type]} $ [jQuery对象] * @param {[type]} self [单例上下文] */ index.Module_home=function($,self){ var _trigger=$('.icon_home'); return{ /*初始化模块*/ init:function(){ //...... } } }; /** * [页面事件入口] * @return {[type]} [description] */ index.eventPage=function($,self) { /*先把模块实例化*/ var util=new self.Module_util($,self), home=new self.Module_home($,self); /*为了方便区分页面,下面用闭包封装*/ var page_home=(function(){ home.init(); })() }; /** * [页面返回跳转] * @return {[type]} [description] */ index.pageRuturn=function() { var self = this; $('#art-content').quickOn('click', '.icon-back', function() { var _self = $(this); /*根据页面状态码进行相应返回跳转*/ switch (self.pageCode) { case 0: //..... break; case 1: //...... break; default: break; } }); }; /** * [首屏模板数据渲染,如果你用模板引擎的话] * @return {[type]} [description] */ index.fGetData=function() { var self = this, //缓存this,上下文指向单例IndxModule util=new self.Module_util($,self); $.ajax({ type: "get", async: false, //注意,因为是首屏渲染,这里必须同步请求 url: self.APIURL + '/index/index.json', data: {}, success: function(res) { if(res){ var data=res.data; //这里我用了artTemplate var art = template('art-main', data); $('#art-content').html(art); } } }); }; /** * [单例初始化入口] * @return {[type]} [description] */ index.init=(function(){ /*缓存单例的上下对象和jQuery对象*/ var self=this, $=jQuery; /*调用单例需要执行的模块*/ self.fGetData(); self.eventPage($,self); self.pageRuturn(); })();
针对单个页面
和上面差不多,删除pageRuturn,而且模块不是按照页面来分而是按照页面结构,分得更细一点而已,同样的,通用的功能写在util模块里面。当然这也不是千篇一律,你可以根据实际情况添加或删除些模块。
希望对你有点帮助 ^_^。
缺点
很明显,这样的编码模式虽然层次感和维护性好,但是代码容易出现冗余,尤其是针对单页应用会让代码变得很长(惭愧啊,我上次的webApp项目,单例模式里的代码已经快到5000行了)。嘿嘿,不过这也是慢慢提升的过程,接下去我要好好研究下 require.js和sea.js,把模块异步加载的功能加进去,创造一个牛逼的JavaScript编码模式 ^_^ 。
众人拾柴火焰高,感兴趣的同学快来加入这个创造过程吧!
@我微信 Jafeney
1 0
- 我的JavaScript设计模式
- javascript的设计模式
- 再起航,我的学习笔记之JavaScript设计模式07(抽象工厂模式)
- 再起航,我的学习笔记之JavaScript设计模式12(适配器模式)
- 再起航,我的学习笔记之JavaScript设计模式15(组合模式)
- 再起航,我的学习笔记之JavaScript设计模式15(组合模式)
- 再起航,我的学习笔记之JavaScript设计模式16(享元模式)
- 再起航,我的学习笔记之JavaScript设计模式17(模板方法模式)
- 再起航,我的学习笔记之JavaScript设计模式18(观察者模式)
- 再起航,我的学习笔记之JavaScript设计模式20(策略模式)
- 再起航,我的学习笔记之JavaScript设计模式25(迭代器模式)
- 再起航,我的学习笔记之JavaScript设计模式26(解释器模式)
- 我理解的设计模式
- 我的大学--设计模式
- 我总结的设计模式
- 我眼中的设计模式
- JavaScript设计模式的评论
- JavaScript常用的设计模式
- json语法
- Gamma压缩与解压
- 【LeetCode】258.Add Digits
- Windows下安装设置Atlassian-Confluence-5.1.4并破解汉化(另附图解)
- 【Codeforces Beta Round 2A】【模拟 map 有map的java实现哦】Winner 第一个达到最终最高分的人名
- 我的JavaScript设计模式
- Java流 学习笔记
- kdiff3工具
- 编译和运行
- 说说 Wine + QQ 轻聊版 7.7 的安装步骤
- 深入理解Linux修改hostname
- 【手把手教你Maven】构建过程
- Nginx编译参数大全 configure参数中文详解
- Tizen web app开发示例(将2048移植到Tizen平台上)