日期处理的js库(迷你版)--自建js库总结


Posted in Javascript onNovember 21, 2011

接口+继承+代码优化思想
先分享下我觉得一个很不错的js编程小技巧,达到很大的代码共用性! 因为很多js库会在原生的对象上进行直接原型扩展,但这是很不好的习惯,不仅加重了每个新实例对象的内存消耗,而且容易造成污染性误解(以为有这东西)!而这也是建js库一个准则:尽量少的原型扩展,特别是越根部的对象!

js建库准则
js建库准则(Dean Edwards在开发base2时候的一些体会)翻译版:http://biaoge.me/2009/12/239 js建库学习好地方:http://ejohn.org/blog/building-a-javascript-library/ 假如你有时间,再看一个建js库超级前沿的文档,包括css3,浏览器最新API(如querySelector) build-a-javascript-framework

用继承提高代码共用性
因为不在原生对象上进行扩展,所以需要一个对外的命名空间,而在这个对象下会有一些接口供外部调用,而为了提高本身js库的健壮性,需要在最大程度减小对外接口(最理想的就是只保存用户需要的接口)! 那么这里便有一个问题,我将它实例化吧:

var namespace={ 
IOfirst:function(){}, 
IOsecond:function(){} 
}

在对象namespace下有个东西需要给IOfirst跟IOsecond共用,而又不想暴露这个接口! 我是通过继承将所有对外接口通过一个父接口包装,然后在一个init方法下统一赋值,而在init这方法下,由于闭包的作用,达到了代码的共用性! 具体做法:

动态添加对外接口,加强代码灵活性

addIO:function(str){ 
var arrs = str.split("."), 
o = this; 
for (i=(arrs[0] == "Date$") ? 1 : 0; i0) 
{ 
var data=arrs[0] 
o[arrs[i]]=o[arrs[i]] ||function(){return this.parIO.apply(null,[data,arguments])}; 
o=o[arrs[i]]; 
} 
} 
InitFuns:function(){ 
var that=this; 
var funs=this.actionFun; 
//init interface for all functions(test successfully) 
var interfaces=["testLeap","disDayNum","todayBetween","getMonthByDay","getNextWeekByDay","getWeekByDay","newDate","compareDate"] 
var shift; 
do{ 
shift=interfaces.shift() 
that.addIO(shift); 
funs[shift]=function(){}; 
}while(interfaces.length>0) 
//set the common object and variable //for browers test 
var br={ 
ie:false,//IE6~8 
ff:false,//Firefox 
ch:false//Chrome 
} 
var nav=navigator.userAgent; 
if(!-[1,]) br.ie=true; 
else if(nav.indexOf("Firefox")>0) br.ff=true; 
else if(nav.indexOf("Chrome")>0) br.ch=true; 
//continue to set IO 
}

在控制台上输出初始化完成的接口: 
日期处理的js库(迷你版)--自建js库总结于是所有对外接口都绑定到parIO下面,这样在有很多接口的情况下可以少敲好多代码哦! 而关键的维系内外部枢纽的parIO负责找到子接口,传参,并返回

parIO:function(){ 
if(Date$.actionFun[arguments[0]]) 
{ 
var customFun=Date$.actionFun[arguments[0]] 
return customFun.apply(null,[arguments[1]]); 
} 
else 
console&&cosnole.log("empty"); 
},

而可以看到有三部分: 
日期处理的js库(迷你版)--自建js库总结在 //set the common object and variable 那里我们可以写我们的公用函数,变量,如判断浏览器,加入类似后台的sqlHelp 函数 之后便是初始化接口了:
funs.newDate=function(){ 
return formatDate(arguments[0][0]) 
} 
funs.getWeekByDay=function(){ 
return getWeekByDay(arguments[0][0]); 
} 
funs.getNextWeekByDay=function(){ 
var speDate=formatDate(arguments[0][0]); 
speDate.setDate(speDate.getDate()+7); 
return getWeekByDay(speDate); 
}

而且这样还有一个好处,就是你的代码不会给人家随便的复制去用,因为接口的内部联系性很大!例如上面的funs.getWeekByDay,funs.getNextWeekByDay公用了getWeekByDay()方法! 最后附上我的不成熟的js库以及接口声明,还望大牛帮忙改进下,万分感谢
/* 
//function:to compare two dates and return information "equal"/"more"/"less" 
//arguments num:2 
//arguments type: Date,Date 
//arguments declaration:1.the target object you need to compare(Subtrahend);2.the compare object(Minuend) 
//return data -- type: String ; three value: "more"(if target is larger),"equal"(if target is equal to compared object),"less"(if target is smaller) 
compareDate:function (objDate,comDate) 
{ 
}, 
//function:to format the string to Date ,and return 
//arguments num:1 
//arguments type: for this interface apply for overload , so String or Date is allowed 
//arguments declaration:if you pass String ,it should format to "YYYY-MM-DD" or "YYYY/MM/DD" or "YYYY:MM:DD" like "2008/10/12" 
//return date : type:Date;one value:the date you want after formatting 
newDate :function (str) 
{ 
}, 
//function:get the start date and end date of the week of the date you have passed and return the Json including {startDay,endDay} 
//arguments num:1 
//arguments type:for this interface apply for overload , so String or Date is allowed 
//arguments declaration:the day you want to get the first day and last day of in this weeek;if you pass String ,it should format to "YYYY-MM-DD" or "YYYY/MM/DD" or "YYYY:MM:DD" like "2008/10/12" 
//return data--type :Json ; one value:{startDay:"",endDay:""} ,you can get it by var.startDay(var is your custom variable) 
getWeekByDay :function (day) 
{ 
}, 
//function:get the start date and end date of next week of the date you have passed and return the Json including {startDay,endDay} 
//arguments num:1 
//arguments type:for this interface apply for overload , so String or Date is allowed 
//arguments declaration:the day you want to get the first day and last day of in this weeek;if you pass String ,it should format to "YYYY-MM-DD" or "YYYY/MM/DD" or "YYYY:MM:DD" like "2008/10/12" 
//return data--type :Json ; one value:{startDay:"",endDay:""} ,you can get it by var.startDay(var is your custom variable) 
getNextWeekByDay :function (day) 
{ 
}; 
//function:get the start date and end date of the month of the date you have passed and return the Json including {startDay,endDay} 
//arguments num:1 
//arguments type:Date 
//arguments declaration:the day you want to get the first day and last day of in this month 
//return data--type :Json ; one value:{startDay:"",endDay:""} ,you can get it by var.startDay(var is your custom variable) 
getMonthByDay :function (day) 
{ 
}, 
//function:to test if including today between the two dates you pass and return in boolean 
//arguments num:2 
//arguments type:Date,Date 
//arguments declaration:the procedure will test the larger and sort automatically ,so the order is no matter 
//return data-- type: boolean ; one value :true if today is between the two dates 
todayBetween :function (startDate,endDate) 
{ 
}, 
//function:to caculate the difference between two dates in days 
//arguments num:2 
//arguments type:Date,Date 
//arguments declaration:1.startDate(the one be reduced) 2.endDate(the one to reduce) 
//return data--type:Number ; one value:the different between these two dates 
disDayNum:function (startDate,endDate) 
{ 
}, 
//function:test the year of the date you have passed leap or not and return in boolean 
//arguments num:1 
//arguments type: for this interface apply for overload , so String or Date is allowed 
//arguments declaration:if you pass String ,it should format to "YYYY-MM-DD" or "YYYY/MM/DD" or "YYYY:MM:DD" like "2008/10/12" 
//return data -- type:boolean ;one value: true if it is leap year or false 
testLeap :function (date) 
{ 
} */

欢迎下载:Date$.js
Javascript 相关文章推荐
js的with语句使用方法
Sep 21 Javascript
固定背景实现的背景滚动特效示例分享
May 19 Javascript
Javascript基础教程之比较操作符
Jan 18 Javascript
js改变style样式和css样式的简单实例
Jun 28 Javascript
一个仿微博登陆邮箱提示框js开发案例
Jul 28 Javascript
setTimeout函数的神奇使用
Feb 26 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
May 27 Javascript
详解cordova打包成webapp的方法
Oct 18 Javascript
Vue页面跳转动画效果的实现方法
Sep 23 Javascript
使用vue打包进行云服务器上传的问题
Mar 02 Javascript
javascript读取本地文件和目录方法详解
Aug 06 Javascript
JS中如何优雅的使用async await详解
Oct 05 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
Nov 21 #Javascript
页面调用单个swf文件,嵌套出多个方法。
Nov 21 #Javascript
javascript中xml操作实现代码
Nov 21 #Javascript
js调用activeX获取u盘序列号的代码
Nov 21 #Javascript
15个款优秀的 jQuery 图片特效插件推荐
Nov 21 #Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
Nov 21 #Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
Nov 19 #Javascript
You might like
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
php 删除一个数组中的某个值.兼容多维数组!
2012/02/18 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
2013/06/20 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
JS实现字体背景跑马灯
2020/01/06 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
Python上下文管理器和with块详解
2017/09/09 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
Python 实现try重新执行
2019/12/21 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
大学生优秀的自我评价分享
2013/10/22 职场文书
优秀的毕业生的自我评价
2013/12/12 职场文书
《月亮湾》教学反思
2014/04/14 职场文书
社区科普工作方案
2014/06/03 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
git stash(储藏)的用法总结
2022/06/25 Servers