gpt4 book ai didi

javascript - 在自定义类上使用 JSON.stringify

转载 作者:数据小太阳 更新时间:2023-10-29 05:04:24 26 4
gpt4 key购买 nike

我试图在redis中存储一个对象,它是一个类的实例,因此具有函数,这是一个例子:

function myClass(){
this._attr = "foo";
this.getAttr = function(){
return this._attr;
}
}

有没有办法将这个对象连同函数一起存储在redis中?我试过 JSON.stringify() 但只保留了属性。如何存储函数定义并能够执行如下操作:

var myObj = new myClass();
var stringObj = JSON.stringify(myObj);
// store in redis and retreive as stringObj again
var parsedObj = JSON.parse(stringObj);

console.log(myObj.getAttr()); //prints foo
console.log(parsedObj.getAttr()); // prints "Object has no method 'getAttr'"

如何在调用 parsedObj.getAttr() 时获取 foo

提前致谢!

编辑

得到了修改 MyClass.prototype 并存储值的建议,但是像这样的东西(setter/getter 以外的函数)呢:

function myClass(){
this._attr = "foo";
this._accessCounts = 0;
this.getAttr = function(){
this._accessCounts++;
return this._attr;
}
this.getCount = function(){
return this._accessCounts;
}
}

我试图说明一个函数,该函数在调用时会计算诸如计数或平均值之类的东西,除了做其他事情。

最佳答案

首先,您没有定义类。

它只是一个对象,具有一个值为函数的属性(在创建新的实例时,构造函数中定义的所有成员函数都将被复制,这就是为什么我说这不是一个类。)

使用 JSON.stringify 时将被剥离。

考虑一下你正在使用 node.js,它使用 V8,最好的方法是定义一个真正的类,并使用 __proto__ 玩点小魔法。无论您在类中使用多少属性(只要每个属性都使用原始数据类型),哪个都可以正常工作。

这是一个例子:

function MyClass(){
this._attr = "foo";
}
MyClass.prototype = {
getAttr: function(){
return this._attr;
}
};
var myClass = new MyClass();
var json = JSON.stringify(myClass);

var newMyClass = JSON.parse(json);
newMyClass.__proto__ = MyClass.prototype;

console.log(newMyClass instanceof MyClass, newMyClass.getAttr());

将输出:

true "foo"

关于javascript - 在自定义类上使用 JSON.stringify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13589880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com