访问闭包内的方法

时间:2014-08-23 14:58:11

标签: javascript

我试图从另一个在此文件bootstrap-datepicker.js之后加载的JS文件中引用UTCDate()方法。 有没有办法让我访问这个方法。 我尝试使用UTCDate()我甚至尝试过window.UTCDate()。

这是原始文件bootstrap-datepicker.js,他们似乎直接在datePicker本身内调用它。

(function($, undefined){

    var $window = $(window);

    function UTCDate(){
        return new Date(Date.UTC.apply(Date, arguments));
    }
    function UTCToday(){
        var today = new Date();
        return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());
    }
    function alias(method){
        return function(){
            return this[method].apply(this, arguments);
        };
    }

    var DateArray = (function(){
        var extras = {
            get: function(i){
                return this.slice(i)[0];
            },
            contains: function(d){
                // Array.indexOf is not cross-browser;
                // $.inArray doesn't work with Dates
                var val = d && d.valueOf();
                for (var i=0, l=this.length; i < l; i++)
                    if (this[i].valueOf() === val)
                        return i;
                return -1;
            },
            remove: function(i){
                this.splice(i,1);
            },
            replace: function(new_array){
                if (!new_array)
                    return;
                if (!$.isArray(new_array))
                    new_array = [new_array];
                this.clear();
                this.push.apply(this, new_array);
            },
            clear: function(){
                this.length = 0;
            },
            copy: function(){
                var a = new DateArray();
                a.replace(this);
                return a;
            }
        };

        return function(){
            var a = [];
            a.push.apply(a, arguments);
            $.extend(a, extras);
            return a;
        };
    })();

2 个答案:

答案 0 :(得分:0)

如果不修改代码,就不能在匿名闭包之外导出该方法。

答案 1 :(得分:0)

这就是closures的工作方式:它们关闭变量。

function UTCDate(){
    return new Date(Date.UTC.apply(Date, arguments));
}

是您IIFE的私人资格。 您最好切换到The Revealing Module Pattern

var myDateApp=function(){
    ...
    function UTCDate(){
        return new Date(Date.UTC.apply(Date, arguments));
    }
    ...

    return {
            ...
            UTCDate:UTCDate,
            ...
           };
}();

然后,您可以通过UTCDate轻松访问功能myDateApp.UTCDate()

稍后切换到AMD