【问题标题】:How to save private propertys of any object in localstorsge如何在本地存储中保存对象的私有属性
【发布时间】:2017-12-31 12:02:33
【问题描述】:

当您尝试对任何对象进行字符串化时,您只会像 json 一样获得公共属性,但是,如果我的对象具有私有属性,我该如何保存它?

【问题讨论】:

  • 请分享您要存储的对象
  • 这只是一个问题,我还没有尝试过
  • 告诉我们您所说的私有财产是什么意思。
  • 但是,如果你想,例如一个具有私有属性 age 和公共属性 name 的对象 person
  • @Daniel JSON 对象没有访问修饰符,JavaScript 中也没有。

标签: javascript local-storage


【解决方案1】:

这是一个带有 Person 对象构造函数的示例。在这种情况下,我们重写该对象的 toJSON 方法以包含私有变量“age”。 toJSON 方法在 JSON.stringify 内部使用

function Person(name, age) {
    var age = age  // Only accessible in the scope on the constructor
    this.name = name

    this.toJSON = function() {
        return {age: age, name: this.name}
    }
}

// eg with localStorage
var john = new Person('John', 40)
localStorage.setItem('John', JSON.stringify(john))

我必须添加之前的评论,在 javascript 中没有私有属性之类的东西:只有作用域变量和闭包作为 getter/setter 才能使它们可供外部访问

【讨论】:

  • 请至少说出你的代码是做什么的。不要只是抛出代码。
  • 我认为值得注意的是,一旦对象被拉出本地存储,私有成员就不再是私有的了。据我所知,对此无能为力。不过,这是目前最好的答案。
【解决方案2】:

目前,Javascript 对象上没有private 成员(属性、方法)之类的东西。 ECMAScript proposal 会将私有字段引入未来版本的 Javascript。但是,这些私有字段将可以从对象范围内严格访问。不可能从对象范围之外访问它们,甚至无法知道它们的存在。

如果您要定义自己的对象,请创建一个toJSON() 方法并根据需要返回对象的字符串表示形式。

【讨论】:

    【解决方案3】:

    所有的 JavaScript 属性都是公开的;本地存储存储只有存储它们的域才能检索到的键:值对,也就是说,如果启用了 cookie!听起来您正试图找到一种在“客户端”脚本语言上进行持久数据存储的方法,答案是无法保证在没有其他技术的情况下客户端计算机上存在持久数据,以确保系统安全;对客户端计算机存储系统的访问受到严格限制。本地存储只能存储有限数量的数据,受浏览器和拥有它的操作系统的限制。

    【讨论】:

    • “在“客户端”脚本语言上”你的意思是问题被标记的语言:JavaScript?
    • 是的,它是一种客户端脚本语言,除非您使用的是 node.js!我把它放在引号中是为了强调它是一种客户端脚本语言。
    猜你喜欢
    • 2021-07-18
    • 2021-09-22
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2017-03-03
    • 1970-01-01
    相关资源
    最近更新 更多