从JSON解析后,JS如何分配var的原型?

时间:2018-09-12 09:32:26

标签: javascript json

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: ???????

1 个答案:

答案 0 :(得分:0)

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

以一种便于传输和存储的形式存储对象的过程称为序列化。但是如您所见,对于具有非标准原型链的自定义对象和方法,所有这些都无法序列化。这是放弃面向对象程序设计的原因,转而使用使用POJO和纯函数的功能编程,因此可以轻松地序列化应用程序的状态。