当你尝试对任何对象进行字符串化时,你只能得到一个json的公共属性,但是,如果我的对象有私有属性,我怎么能保存它?
答案 0 :(得分:3)
以下是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才能让它们被外部访问
答案 1 :(得分:2)
目前,Javascript对象上没有private
成员(属性,方法)这样的东西。 ECMAScript proposal会将私有字段带入未来版本的Javascript。但是,这些私有字段将在对象范围内严格访问。从对象的范围之外访问它们是不可能的,甚至不可能知道它们的存在。
如果要定义自己的对象,请创建一个toJSON()
方法并返回对象的字符串表示形式。
答案 2 :(得分:-1)
所有javaScript属性都是公共的;本地存储存储密钥:值对只能由存储它们的域检索,即如果启用了cookie!这听起来像是你试图找到一种方法来在客户端进行持久数据存储的问题"脚本语言的答案是,在没有其他技术的情况下,不保证客户端机器上存在持久数据,以保证系统安全;对客户机的存储系统的访问受到严格限制。本地存储只能存储受拥有它的浏览器和操作系统限制的有限数量的数据。