如何在会话存储中使用函数作为值
How to use a function as value in Session storage
我想在调用存储在 Session Storage
中的特定 key
时触发函数。
我尝试了下面给出的代码。
sessionStorage.setItem('user', function myfync{alert("Hi")});
但是在使用 getItem 函数时,它作为字符串返回给我,并且该函数没有得到执行。有没有我缺少的解决方法?
Sessionstorage(和 localstorage)仅支持字符串作为值。
这意味着您必须在存储之前将值转换为字符串,并在读取后将其转换回来。
这可以使用 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?
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');
我想在调用存储在 Session Storage
中的特定 key
时触发函数。
我尝试了下面给出的代码。
sessionStorage.setItem('user', function myfync{alert("Hi")});
但是在使用 getItem 函数时,它作为字符串返回给我,并且该函数没有得到执行。有没有我缺少的解决方法?
Sessionstorage(和 localstorage)仅支持字符串作为值。
这意味着您必须在存储之前将值转换为字符串,并在读取后将其转换回来。
这可以使用 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?
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');