为什么JSON stringify然后解析不适用于此对象。它对于具有局部变量的对象是否有效?
function Task(description) {
var _description = description;
this.getDescription = function() {
return _description;
}
}
var task = new Task('wash car');
console.log(task.getDescription());
var json = JSON.stringify(task);
console.log(JSON.parse(json).getDescription());
答案 0 :(得分:2)
JSON无法对函数进行字符串化(并且它不应该能够)。
但从技术上讲,当你需要Stringify一个对象时,你不需要这些函数。您可以按原样在应用程序中传递对象。
编辑:
如果您需要的是要在本地存储的对象,那么保存这些功能并不是一个好主意。您可以做的是存储对象的属性并在检索时创建新实例。
答案 1 :(得分:0)
不可能将构造函数的实例字符串化,并且在将其转换回对象后仍然是构造函数的实例。
相反,您需要为Task实例提供一个输出您可以存储的json字符串的方法,然后当您希望它再次成为Task的实例时,您可以创建一个新实例。
function Task(description) {
var _description = description;
this.getDescription = function() {
return _description + '(possibly modified?)';
}
this.stringify = function () {
return JSON.stringify({
description: this.getDescription(),
_description: _description
});
}
}
var task = new Task('wash car');
console.log(task.getDescription()); // 'wash car (possibly modified?)'
var json = task.stringify();
console.log(json); // {"description": "wash car (possibly modified?)", "_description": "wash car"}
var taskAgain = new Task(JSON.parse(json)._description);
console.log(taskAgain.getDescription()); // 'wash car (possibly modified?)'
我添加了" (possibly modified?)"
来证明为什么传递getDescription
的结果和_description
中存储的字符串非常重要。如果getDescription
永远不会更改说明,则首先不需要getDescription
,这可以大大简化整个过程。
function Task(description) {
this.description = description;
}
var task = new Task('wash car');
console.log(task.description); // wash car
var json = JSON.stringify(task);
console.log(json); // {"description": "wash car"}
console.log(JSON.parse(json).description); // wash car
var taskAgain = new Task(JSON.parse(json).description);
console.log(task.description); // wash car