JavaScript中使用闭包开发一个简单的模块

1.闭包的概念

         就我个人使用过程中的理解,闭包就是将某个功能集合通过函数封装成一个模块,对外暴露一个接口,只可以通过此接口去访问,闭包中的其他成员对于其他的模块是隐藏的,限制了作用域,减少了名称冲突的发生.

2.闭包的作用

        封装一些通用的功能供多个模块使用,不用担心各个模块内出现命名冲突.

3.如何开发闭包

      闭包一般使用一个自包含函数包裹,具体做法如下:

1.添加一个js文件,js文件内部使用这样的形式(function(){  ..封转的功能函数区..  }())

2.功能函数写法 var xxx = function(paramater){};

3.对外暴露接口 var Init = function(){

      return {

       xxx:xxx,

       xxx:xxx

      };

 }

3.对外暴露接口通过window.模块名 = Init;

下面是一个例子,这个例子是处理时间的模块:

(function () {
    var getCalcuQuarter = function (month) {
        return Math.floor((month % 3 == 0 ? (month / 3) : (month / 3 + 1)));
    };
    var getFormatTime = function (time, format) {

        var args = {
            "M+": time.getMonth() + 1,
            "d+": time.getDate(),
            "h+": time.getHours(),
            "m+": time.getMinutes(),
            "s+": time.getSeconds(),
            "q+": Math.floor((time.getMonth() + 3) / 3), //quarter

            "S": time.getMilliseconds()
        };
        if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (time.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var i in args) {
            var n = args[i];

            if (new RegExp("(" + i + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? n : ("00" + n).substr(("" + n).length));
        }
        return format;
    }
    var getOutputFormatTime = function (startTime, endTime, type) {
        type = type + '';
        var timeStr = "";
        var start = new Date(startTime);
        var end = new Date(endTime);

        var year = start.getFullYear();
        var month = start.getMonth() + 1;
        var day = start.getDate();

        var hour = start.getHours();
        var min = start.getMinutes();
        //var mil = start.getMilliseconds();

        var endyear = end.getFullYear();
        var endmonth = end.getMonth() + 1;
        var endday = end.getDate();

        var endhour = end.getHours();
        var endmin = end.getMinutes();
        //var endmil = end.getMilliseconds();
        switch (type) {
            case '5m':
                timeStr = year + "年" + month + "月" + day + "日" + hour + "时" + min + "分钟";
                timeStr = timeStr + "_" + endyear + "年" + endmonth + "月" + endday + "日" + endhour + "时" + endmin + "分钟";
                break;
            case 'hour':
                timeStr = year + "年" + month + "月" + day + "日" + hour + "时";
                timeStr = timeStr + "_" + endyear + "年" + endmonth + "月" + endday + "日" + endhour + "时";
                break;
            case 'day':
                timeStr = year + "年" + month + "月" + day + "日";
                timeStr = timeStr + "_" + endyear + "年" + endmonth + "月" + endday + "日";
                break;
            case 'month':
                timeStr = year + "年" + month + "月";
                break;
            case 'quarter':
                timeStr = year + "年第" + getCalcuQuarter(month) + "季度";
                break;
            case 'year':
                timeStr = year + "年";
                break;
            default:
                timeStr = "";
        }
        return timeStr;
    }
    var getFirstDayToMonth = function (Month) {

        var t1 = Month;
        var t2 = new Date(t1);
        var t3 = new Date(t2.setFullYear(t2.getFullYear(), t2.getMonth(), 1));
        var t4 = new Date(t3.setHours(00, 00, 00, 001));
        return getFormatTime(t4, "yyyy-MM-dd hh:mm:ss");
    };
    var getLastDayToMonth = function (Month) {

        var t1 = Month;
        var t2 = new Date(t1);
        var t3 = new Date(t2.setFullYear(t2.getFullYear(), t2.getMonth() + 1, 1));
        var t4 = new Date(t3.setHours(0, 0, 0, 0));
        var t5 = new Date(t4.getTime() - 24 * 60 * 60 * 1000);//一月中的最后一天
        var t6 = new Date(t5.setHours(23, 00, 00, 000));
        return getFormatTime(t6, "yyyy-MM-dd hh:mm:ss");
    };
    var getFirstDayToYear = function (Year) {
        var t1 = new Date(Year);
        var t2 = new Date(t1.setFullYear(t1.getFullYear(), 0, 1));
        var t3 = getFirstDayToMonth(t2);
        return t3;
    };
    var getLastDayToYear = function (Year) {
        var t1 = new Date(Year);
        var t2 = new Date(t1.setFullYear(t1.getFullYear(), 11, 1));
        var t3 = getLastDayToMonth(t2);
        return t3;
    }
    var getCheckTimeResult = function (startid, endid, timeType) {
        var start = $("#" + startid).val();
        var starttime = $("#" + startid).data(timeType).value()
        var errorQueue = [];

        var end = $("#" + endid).val();
        var endtime = $("#" + endid).data(timeType).value()
        if (start == "") {
            errorQueue.push("请选择开始时间!");
            return {
                IsSuccess: false,
                ErrorQueue: errorQueue,
                ErrorNumber: 1,
                ErrorEndNumber: 0
            };
        } else if (end == "") {
            errorQueue.push("请选择结束时间!");
            return {
                IsSuccess: false,
                ErrorQueue: errorQueue,
                ErrorNumber: 1,
                ErrorEndNumber: 1
            };
        }else if (starttime == null) {
            errorQueue.push("开始时间格式无效,请注意时间格式与范围!");
            return {
                IsSuccess: false,
                ErrorQueue: errorQueue,
                ErrorNumber: 2,
                ErrorEndNumber: 0
            };
        } else if (endtime == null) {
            errorQueue.push("结束时间格式无效,请注意时间格式与范围!");
            return {
                IsSuccess: false,
                ErrorQueue: errorQueue,
                ErrorNumber: 2,
                ErrorEndNumber: 1
            };
        }else if (starttime > endtime) {
            errorQueue.push("开始时间不可大于结束时间!");
            return {
                IsSuccess: false,
                ErrorQueue: errorQueue,
                ErrorNumber: 3
            };
        } else
            return {
                IsSuccess: true,
                ErrorQueue: errorQueue,
                ErrorNumber: 4
            };
    };

    var Init = function () {
        return {
            getCalcuQuarter: getCalcuQuarter,
            getFormatTime: getFormatTime,
            getOutputFormatTime: getOutputFormatTime,
            getFirstDayToMonth: getFirstDayToMonth,
            getLastDayToMonth: getLastDayToMonth,
            getFirstDayToYear: getFirstDayToYear,
            getLastDayToYear: getLastDayToYear,
            getCheckTimeResult: getCheckTimeResult
        };
    };
    window.CalcuDateTime = Init;
}())

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值