始终返回函数值的Javascript变量

Javascript variable that always returns value of function

本文关键字:Javascript 变量 函数 返回      更新时间:2023-09-26

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

我厌倦了我使用的网站上的不活跃警告。我每天都会看几次,但我会把它打开,以防有更新需要查看。它会在15分钟后使用一些javascript自动注销我——令牌不会因cookie过期而无效,我的会话也不会在服务器端删除——它检查的变量称为last_user_action

我想使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控制台中。

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

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

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

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

您可以根据自己的需要更改更新周期,因为更新功能非常轻量级,所以您可以经常运行它,这无关紧要。

假设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

这通常是个坏主意,但考虑到你在这里进行黑客攻击,这似乎并没有那么糟糕。

AFAIK不能用变量来实现。

但是你可以使用一个属性,使用getter:

var obj = {};
Object.defineProperty(obj, 'last_user_action', {
    get: function() { return new Date().getTime(); }
});
obj.last_user_action; // Current date time