如何在会话存储中将函数用作值

时间:2019-06-30 10:37:23

标签: javascript html web-development-server session-storage

我想在调用存储在key中的特定Session Storage时触发一个函数。

我尝试了下面给出的代码

sessionStorage.setItem('user', function myfync{alert("Hi")});

但是在使用getItem函数时,它作为字符串返回给我,并且该函数未执行。有没有针对我的解决方法?

2 个答案:

答案 0 :(得分:0)

sessionStorage.setItem将存储一个String,因此从技术上讲答案是否定的。但是,您可以为sessionStorage使用包装器,例如:

SessionStorage = {
    setItem: function(key, value) {sessionStorage.setItem(key, value)},
    getItem: function(key) {
        var value = sessionStorage.getItem(key);
        if (value.startsWith("function")) {
            return eval("(" + value + ")()")
        }
        return value;
    }
}

像这样使用它:

SessionStorage.setItem('user', function myfync() {alert("Hi")});

并像这样测试它:

SessionStorage.getItem('user');

答案 1 :(得分:-1)

会话存储(和本地存储)仅支持将字符串作为值。

这意味着您必须在存储值之前将其转换为字符串,并在读取后将其转换回。

这可以使用String()和Function()完​​成。

示例:

// Write
const a = function myfunc() {
    alert("Hi");
};
sessionStorage.setItem('user', String(a));

// Read
const b = sessionStorage.getItem('user');
const c = Function('return ' + s);

//Execute
c();

将字符串转换回函数是一个有争议的话题,更多信息可以在这里找到:Is there a way to create a function from a string with javascript?