从外部函数更新命名空间模块变量

时间:2015-01-28 08:57:10

标签: javascript jquery namespaces resize

我会尝试保持这种超级简单,只需使用我目前拥有的代码大纲。基本上我有一个自动调用函数的命名空间模块,它在加载时运行并使用它们的值填充变量并返回它们以使其可供其他函数访问:

moduleA = function() {
    var a = $(window).height(),
        b = $('#imgs').height(),
    // other variables that need updating

    return {
       windowH: a,
       imgH: b
    }
}();

然后在另一个在scroll上调用的函数内访问这些变量:

function scrollSpeed() {
    var start = $('#article-wrap').offset().top,
        end = (start + moduleA.imgH) - moduleA.windowH;

    //use variables in animations
}

$(window).scroll(function() {
    scrollSpeed();
})

上面的问题是当我调整窗口大小时我需要更新moduleA中的变量。最初我写了一个函数" update()"在模块内部并返回它,然后在我的debounced resize函数中调用,但这不起作用?

moduleA = function() {
    var a = $(window).height(),
        b = $('#imgs').height(),
    // other variables that need updating

    function update() {
       a = $(window).height(),
       b = $('#imgs').height(),
       ...// other variables that are updated
    }

    return {
       windowH: a,
       imgH: b,
       update: update
    }
}();

var resizeFn = debounce(function() {
    moduleA.update();
}, 100);

显然我没有把所有东西都包括在内,我可以根据要求提供。任何想法,我哪里出错?

1 个答案:

答案 0 :(得分:0)

您还需要更新对象属性:

function update() {
   a = $(window).height(),
   b = $('#imgs').height(),
   ...// other variables that are updated

   this.windowH = a;
   this.imgH = b;
}