【问题标题】:How to use a function as value in Session storage [duplicate]如何在会话存储中使用函数作为值[重复]
【发布时间】:2019-06-30 10:37:23
【问题描述】:

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

我尝试了下面给出的代码

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

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

【问题讨论】:

  • @weegee 这不是重复的,因为问题比这一步更广泛,它是关于会话存储值格式,因此将函数转换为字符串 从字符串。
  • @seahorsepip OP 知道如何从会话存储中获取数据并放入会话存储中。他们不知道如何将该字符串转换为函数“但是在使用 getItem 函数时,它作为字符串返回给我,并且该函数没有被执行” 这显然是个骗局跨度>
  • @geewee 不是,用户试图将函数放入会话存储中,但不明白为什么他从会话存储中获取字符串而不是函数。问题中没有提到他希望从会话存储而不是函数返回字符串。
  • 我假设使用 getItem 时应该触发该函数。

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


【解决方案1】:

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');

【讨论】:

  • 这有效,但不能在整个会话中使用它,这是我想首先使用 sessionStorage 的主要原因
  • @MissXToTheT 它可以在整个会话中使用。再看一下代码:它存储到 sessionStorage 并从那里加载。这里唯一添加的是它检查一个函数并在找到它时执行。通常,您需要使用 SessionStorage 而不是 sessionStorage 来实现这一点。
【解决方案2】:

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?

【讨论】:

  • 我在 eval 中使用了这段代码,它可以工作,谢谢!
猜你喜欢
  • 2019-10-23
  • 2011-07-31
  • 2015-03-12
  • 2018-12-09
  • 2023-03-07
  • 1970-01-01
  • 2011-04-22
  • 2020-05-13
  • 2019-08-11
相关资源
最近更新 更多