首页 > 解决方案 > JS从JSON解析后如何分配var的原型?

问题描述

JS 从 JSON 解析后如何分配 var 的原型,它只是分配基本原型,例如 Object 还是根本没有原型?它会记得汽车原型吗?

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

var auto = new Car('Honda', 'Accord', 1998);

console.log('auto instanceof Car:', auto instanceof Car);
// expected output: true

console.log('auto instanceof Object:', auto instanceof Object);
// expected output: true

// Commented this out because I doubt the implementation matters
//var newJSONObj = auto.toJSON(); 
var newJSONObj = JSON.stringify(auto);
console.log('as JSON:', newJSONObj);

newObj = JSON.parse(newJSONObj);

console.log('newObj instanceof Car:', newObj instanceof Car);
// expected output: ???????

console.log('newObj instanceof Object:', newObj instanceof Object);
// expected output: ???????

标签: javascriptjson

解决方案


当你JSON.stringify对一个对象进行操作时,javascript 只存储对象的一部分:它的属性和值。其余的都丢失了。因此,当您使用它重新创建对象时,JSON.parse它是一个普通对象。

以有利于传输和存储的形式存储对象的过程称为序列化。但是正如你所看到的,对于具有非标准原型链和例如方法的自定义对象,这一切都无法序列化。这是放弃面向对象编程转而使用 POJO 和纯函数的函数式编程的一个原因,因此应用程序的状态可以很容易地序列化。


推荐阅读