不知道如何从新范围调用我的函数

时间:2015-08-17 15:55:50

标签: javascript scope

希望这个标题是正确的:)

我使用模块化模式:

(function (vvv, $, undefined) {
    'use strict';

    vvv = (function () {
        vvv.functionName = (function () {
            ...
        });
   ......
}(
    window.vvv = window.vvv || {},
    jQuery
));

我还使用David Walsh

制作的去抖功能
vvv.debounce = (function(func, wait, immediate) {
            var timeout;
            return function() {
                var context = this, args = arguments;
                var later = function() {
                    timeout = null;
                    if (!immediate) func.apply(context, args);
                };
                var callNow = immediate && !timeout;
                clearTimeout(timeout);
                timeout = setTimeout(later, wait);
                if (callNow) func.apply(context, args);
            };
        });

我使用去抖功能来调用某个窗口大小的其他函数。但是现在在这些函数中我的主vvv对象不存在。现在要快速修复此问题,我只需调用window.vvv.myfunction()。修复很好,但是,重点是我想要在vvv对象中的所有函数。不知道为什么,这更多是出于好奇:)你会如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

手动将对象绑定到新函数。我想你想做这样的事情:

vvv.debounce(function() { /* do stuff */ }.bind(vvv), 100);

但请检查.bind()的浏览器兼容性,并非所有IE版本都支持此功能。您也可以使用jQuery.proxy

vvv.debounce($.proxy(function() { /* do stuff */ }, vvv), 100);

这也适用于IE。

答案 1 :(得分:0)

如果你想在vv中保持debounce并仍然使回调解析vv你可以

return function() {
                var context = this, args = arguments;
                 context.vv = vv; // add prop vv to context which is "this"
                 ......
                 .....
}

在回调中,您可以访问vv this.vv而不是window.vv