ECMAScript / Node:是否可以将对象实例或上下文保存到文件系统?

是否有可能将一个对象(一个类的实例)保存到包括其内部值的文件系统中?

请不要标记为脱离主题。 我明白,即使这是可以实现的,也不是普遍的做法。 如果它是hacky也没关系。 我只是好奇,是否能够实现,因为这是星期天8点,我有一个漫长的一天。

function Node() { let x = Math.random() this.data = function() { return x } } let node1 = new Node() // save it to the disk somehow as node1 saveNode('node1', node1) // load it back from the disk into memory somehow, perhaps using eval?? let savedNode = loadNode('node1') console.log( savedNode.data(), node1.data() ) /* these should be the same */ 

你可以通过在JSON.stringify中使用“修饰符”函数作为第二个参数来对包含它的函数的对象进行string化处理,但这不会成为诀窍。

Solutions Collecting From Web of "ECMAScript / Node:是否可以将对象实例或上下文保存到文件系统?"

只有对象(或类)合作。 不,通常不可能访问隐藏在closures范围后面的值。

你可以做类似的事情

 class Node { constructor(x = Math.random()) { this.data = () => x; } toJSON() { return {x: this.data()}; } static fromJSON(obj) { return new this(obj.x); } } const fs = require("fs"); function save(name, obj) { fs.writeFileSync(`./${name}.json`, JSON.stringify(obj), "utf-8"); } function load(constr, name) { return constr.fromJSON(JSON.parse(fs.readFileSync(`./${name}.json`, "utf-8"); } let node1 = new Node(); save('node1', node1); let savedNode = load(Node, 'node1'); console.log(savedNode.data(), node1.data())