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: ???????
答案 0 :(得分:0)
对对象执行JSON.stringify
时,javascript仅存储对象的一部分:其属性和值。其余的全部丢失。因此,当您使用JSON.parse
重新创建对象时,它是一个普通对象。
以一种便于传输和存储的形式存储对象的过程称为序列化。但是如您所见,对于具有非标准原型链的自定义对象和方法,所有这些都无法序列化。这是放弃面向对象程序设计的原因,转而使用使用POJO和纯函数的功能编程,因此可以轻松地序列化应用程序的状态。