javascript - 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: ???????
解决方案
当你JSON.stringify
对一个对象进行操作时,javascript 只存储对象的一部分:它的属性和值。其余的都丢失了。因此,当您使用它重新创建对象时,JSON.parse
它是一个普通对象。
以有利于传输和存储的形式存储对象的过程称为序列化。但是正如你所看到的,对于具有非标准原型链和例如方法的自定义对象,这一切都无法序列化。这是放弃面向对象编程转而使用 POJO 和纯函数的函数式编程的一个原因,因此应用程序的状态可以很容易地序列化。
推荐阅读
- ruby-on-rails - 我的索引页面加载缓慢。如何减少加载时间?
- java - 如何在 JavaFX 中继续循环之前等待媒体结束?
- django - 为什么 Django 不连接到 SQL Server 2019?
- typescript - 如何在 Nativescript 的底部导航中添加操作栏
- node.js - 发现 1 个低严重性漏洞
- c++ - CMake 错误:在 Mac OS 上使用 clang 找不到 OpenMP_C(缺少:OpenMP_C_FLAGS)
- python - 将变量与多个值进行比较的简洁方法
- apache-kafka - 知道为什么这个 Kafka 经纪人会崩溃吗?里面的日志。我在这里没有看到任何明显的东西
- excel - 在 Excel 工作表中显示数据时间时出错
- c++ - constexpr(sizeof(T)):为什么在 `sizeof` 上指定 `constexpr`?