全局var的JS监听器?

时间:2010-09-28 15:41:05

标签: javascript

我希望将所有内容保存在一个函数中,而不是将所有各种变量都设置为全局变量。

是否可以在函数main中设置一个事件监听器来监视全局var?

在这个例子中,当索引被改变时调用doTheStuff()?或者我可能会以错误的方式解决这个问题?

var index = 0;


function main(data, data, data, data, data, data,)
{

function one(){ two() }

function two(){ three() }

function three(){ }

function doTheStuff(){ }

}

2 个答案:

答案 0 :(得分:1)

可能有更好的方法来解决这个问题,例如:

// An anonymous function to provide scoping
(function() {
    var index = 0;  // A non-global, but accessible to everything within this scoping function

    function setIndex(newIndex) {
        index = newIndex;
        doTheStuff();
    }

    function one() { two(); }

    function two() { three(); }

    function three() {
        // Perhaps `three` needs to change the index
        setIndex(index + 1);
    }

    function doTheStuff() { }
})();

如果这对您要执行的操作不起作用,您可以设置间隔计时器并根据保存的副本检查值。

var index = 0;
function main(...) {
    var lastIndex = index;

    setInterval(checkIndex, 100); // Every 100ms or so

    function checkIndex() {

        if (index != lastIndex) {
            lastIndex = index;
            doTheStuff();
        }
    }

    // Other functions omitted...

}

index 可能在间隔之间多次更改;这是否重要取决于你想要做什么。

展望未来,您将能够使用属性上的getter和setter(新ECMAScript 5规范的一部分)来实现此目的,但这仍未得到广泛实施。有些浏览器确实实现了它们,虽然它们有自己的语法,但其他浏览器还没有实现它们。

答案 1 :(得分:0)

如果您不拥有index,则无法以跨浏览器方式执行此操作。如果您拥有index,则可以设置get / set函数来处理其值。

如果您不需要跨浏览器工作,可以在Firefox,Safari 3 +,Opera 9.5中使用 Getters and Setters