如何在嵌套的IIFE模块中引用父JavaScript函数?

时间:2014-06-05 14:36:55

标签: javascript jquery iife

请使用以下代码...在setTimeout匿名函数中,引用alert.hide()方法的正确方法是什么?将整个电话写为admin.alert.hide();是否正确?或者是否有更好的方式来引用admin而无需直接调用它?

var admin = (function(jQuery, window, document, undefined) {
    return {
        loader : (function(admin) {
            var fade = 75;
            var loader = '#loader';
            return {
                show : function () {
                    jQuery(loader).stop().fadeIn(fade);
                },
                hide : function() {
                    jQuery(loader).stop().fadeOut(fade);
                }
            }
        })(),
        alert : (function() {
            var timeout;
            var fade = 500;
            var milliseconds = 1000;
            var alert = '#alert';
            return {
                timeout : timeout,
                show : function(message) {
                    jQuery(alert).find('p').text(message);
                    jQuery(alert).stop().fadeIn(fade);
                    clearTimeout(this.timeout);
                    this.timeout = setTimeout(function() {  }, milliseconds);
                },
                hide : function() {
                    jQuery(alert).stop().fadeOut(fade);
                }
            }
        })()
    }
})(jQuery, window, document);

1 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

return 
{
    timeout : timeout,
    show : function(message) 
    {
        jQuery(alert).find('p').text(message);
        jQuery(alert).stop().fadeIn(fade);
        clearTimeout(this.timeout);
        this.timeout = setTimeout((function() { this.hide(); }).bind(this), milliseconds);
    },
    hide : function() 
    {
        jQuery(alert).stop().fadeOut(fade);
    }
}