日期处理的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 相关文章推荐
javascript jQuery $.post $.ajax用法
Jul 09 Javascript
javascript调试说明
Jun 07 Javascript
Javascript读取cookie函数代码
Oct 16 Javascript
jquery tab插件精简版分享
Sep 10 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
Jul 11 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
Jan 02 Javascript
layui 设置table 行的高度方法
Aug 17 Javascript
又拍云 Node.js 实现文件上传、删除功能
Oct 28 Javascript
详解微信小程序获取当前时间及日期的方法
Apr 28 Javascript
详解在Angular4中使用ng2-baidu-map的方法
Jun 19 Javascript
在vue中使用echarts(折线图的demo,markline用法)
Jul 20 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
Nov 03 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 adodb介绍
2009/03/19 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
php缓冲输出实例分析
2015/01/05 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
js 字符串转换成数字的三种方法
2013/03/23 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
[01:58]2018DOTA2亚洲邀请赛趣味视频——交流
2018/04/03 DOTA
python从sqlite读取并显示数据的方法
2015/05/08 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
python将unicode和str互相转化的实现
2020/05/11 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
远程调用的原理
2014/07/05 面试题
旅游管理专业学生求职信
2013/09/28 职场文书
总经理岗位职责范本
2014/02/02 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
倡议书格式范文
2014/04/14 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
合作意向书怎么写
2019/06/24 职场文书
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android