例如,我有一个类:
function Test() {
}
Test.prototype = {
'setTest' : function(test) {
this.test = test;
}
}
var test = new Test();
Test.setTest('test');
我想将对象test保存在数据库中。 如何将对象test序列化为字符串?(包括方法、变量等)
例如,我有一个类:
function Test() {
}
Test.prototype = {
'setTest' : function(test) {
this.test = test;
}
}
var test = new Test();
Test.setTest('test');
我想将对象test保存在数据库中。 如何将对象test序列化为字符串?(包括方法、变量等)
使用 JSON 简单易懂
JSON.stringify( test );
var abc = function(thing) { return thing; }
abc.toString();
// gives "function(thing) { return thing; }" on the command line
你肯定可以将方法序列化为字符串替代实际方法,但是你需要创建一个副本对象以便能够捕获源对象上的每个元素(我认为是这样做,而不是在原地替换它们)。
希望这可以帮助你更好地思考问题,也许让你意识到你没有必要将方法序列化(我所知道的人都没有这样做,也不合理)。
最好的方法是编写自己的序列化方法,根据你的getter创建一个带有属性的JSON对象。通常情况下,你为每个属性定义一个getter方法。这样就可以适用于大多数情况(因此不必为每个类定义一个serialize方法)。
function serialize(obj) {
var serialized = {};
for(var prop in obj) {
if (obj.hasOwnProperty(prop) && typeof obj[prop] == 'function') {
if (/^get.*/.test(prop)) {
var value = obj[prop]();
var name = prop.replace('get', '');
if (typeof value === 'object') {
serialized[name] = this.serialize(value);
continue;
}
serialized[name] = value;
}
}
}
return serialized;
};
如果您想将属性值重置回类中,您有两个选项:
示例:
function unserialize(obj, emptyClass) {
// Check emptyClass for setters and map the data from obj to it.
return 'class instance';
}
我之前曾经支持过类似这样的功能。我最终将函数名称保存为字符串并将其序列化为JSON格式。然后当我回到客户端时,使用像this question中发布的帮助程序执行该函数。
如果有人有更好的解决方法,请告诉我!
我最近不得不找到这个问题的解决方案。我相信它可以得到改进。
首先,我创建了一个用于实例化“可序列化”对象的模块。
function MyObj(serialised){
this.val = "";
if(serialised){
var unserialised = JSON.parse(serialised);
for (var i in unserialised) {
this[i] = unserialised[i];
}
}
}
MyObj.prototype.myMethod = function () { return this.val;};
module.exports = MyObj;
当然,你必须考虑错误处理和其他验证。
test.setTest("test")
,而不是Test.setTest("test")
。 - Šime Vidas