【问题标题】:Is it possible to set non-modifiable (constant) item in the localStorage? If so, how?是否可以在 localStorage 中设置不可修改(常量)项?如果是这样,怎么做?
【发布时间】:2012-02-23 10:37:01
【问题描述】:

这是一种罕见的情况,但是否可以在 localStorage 中设置项目,使其即使在同一个域中也无法修改?如果没有,是否有任何解决方法?例如。监听 localStorage 访问事件并取消该特定变量的本地存储访问事件?

我知道这是一个奇怪的案例,可能不可能,但是有什么想法吗?

示例用例:

您正在创建一个第三方开发者可以创建的平台 应用程序并将它们添加到同一个域。你希望 appPolicy 是 可通过 localStorage 获得,但您不希望其他开发人员使用 修改它。

【问题讨论】:

  • 我不认为本地存储是您追求的方式。如果您想添加全局变量供开发人员访问,但他们无法存储修改后的值,只需给他们一个为网站开发所需的包含并将您的所有变量放在那里。

标签: javascript jquery html local-storage


【解决方案1】:

您不能在 localStorage 中存储只读数据。但是,如果您想要 JavaScript 中的只读属性,您可以将它们设为私有,并通过特权方法公开它们。例如:

function Person() {
    var ssn = '123-456-7890';  // private; cannot be accessed from outside the class

    // privileged method. has access to private data, and is publicly available  
    this.getSSN = function() {
        return ssn;
    }
}

一旦您创建了Person 的实例,就无法(据我所知)更改ssn。

我希望这会有所帮助。

【讨论】:

  • 没有办法改变ssn,但是有办法改变getSSN返回的内容:var person = new Person(); person.getSSN = function () { return '000-000-0000'
  • @MaxNanasy:好点,我没想到。幸运的是,您可以通过密封构造函数及其原型来防止这种情况,例如Object.seal(Person); Object.seal(Person.prototype)。请注意,这只适用于 ES5 兼容的浏览器。
猜你喜欢
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 2012-06-19
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多