总是返回函数值的Javascript变量

时间:2014-10-09 19:10:33

标签: javascript

我很确定我知道这个问题的答案(并且它不是),但是是否有可能创建一个总是返回函数值的变量而不用#34;调用"变量?

我在我使用的网站上厌倦了不活动警告。我每天都会看几次,但是我保持打开状态,以防我需要查看更新。它会在15分钟后使用一些javascript自动注销 - 令牌不会因Cookie过期而失效,我的会话也不会被服务器端删除 - 而它检查的变量称为last_user_action。< / p>

我希望last_user_action始终指向new Date().getTime();

last_user_action = function() { new Date().getTime(); }
如果我可以轻松地将所有对last_user_action的引用更改为last_user_action(),那么

会有效,但我无法做到。

last_user_action = (function() { return new Date().getTime(); })();

只设置一次值。

就像我说的那样,我怀疑是否有办法做到这一点,但如果有可能,我该怎么办呢?

修改 它现在发生在我身上,它更容易运行

window.setInterval(function() { last_user_action = new Date().getTime(); }, 1000 * 60 * 10);

在Chrome的javascript控制台中。

4 个答案:

答案 0 :(得分:4)

好吧,如果您确定它的工作方式是这样,您可以每分钟使用setInterval来设置值:

setInterval(function(){
    last_user_action = new Date().getTime();
},60000)

答案 1 :(得分:2)

不是那么直接,但定期更新变量是微不足道的。

function updateLastUserAction() {
    last_user_action = new Date().getTime(); // or Date.now();
    setTimeout(updateLastUserAction, 10000); // run again in 10 seconds
}

updateLastUserAction();

您可以更改更新周期以适合您 - 因为更新功能非常轻量级,您可以经常运行它并不重要。

答案 2 :(得分:2)

假设last_user_action是全局变量,这意味着它实际上是window的属性,您可以为该属性定义一个getter。

Object.defineProperty(window, 'last_user_action', {
  get: function() {
    return new Date().getTime();
  }
});
last_user_action; // 1412882205169
last_user_action; // 1412882206490

这通常是一个坏主意,但鉴于你在这里乱砍,它看起来并不是那么糟糕。

答案 3 :(得分:1)

AFAIK你不能用变量做到这一点。

但你可以使用getter:

对属性进行处理
var obj = {};
Object.defineProperty(obj, 'last_user_action', {
    get: function() { return new Date().getTime(); }
});
obj.last_user_action; // Current date time