sca*_*les 6 javascript json node.js
我正在尝试将对象存储在redis中,这是一个类的实例,因此具有函数,这是一个示例:
function myClass(){
this._attr = "foo";
this.getAttr = function(){
return this._attr;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将这个对象与函数一起存储在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'"
Run Code Online (Sandbox Code Playgroud)
我怎么才能foo打电话parsedObj.getAttr()?
先感谢您!
编辑
有建议修改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;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图说明一个函数,除了做其他的东西之外,它会在调用时计算类似计数或平均值的函数.
首先,您没有定义一个类.
它只是一个对象,具有一个属性,其值是一个函数(在构造函数中定义的所有成员函数将在创建新实例时被复制,这就是为什么我说它不是一个类.)
使用时将被剥离JSON.stringify.
考虑一下你使用的是使用V8的node.js,最好的方法是定义一个真正的类,然后发挥一点魔力__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());
Run Code Online (Sandbox Code Playgroud)
这将输出:
true "foo"
Run Code Online (Sandbox Code Playgroud)
不,JSON不存储函数(这也是非常低效的).相反,使用序列化方法和反序列化构造函数.例:
function MyClass(){
this._attr = "foo";
this.getAttr = function(){
return this._attr;
}
}
MyClass.prototype.toJSON() {
return {attr: this.getAttr()}; // everything that needs to get stored
};
MyClass.fromJSON = function(obj) {
if (typeof obj == "string") obj = JSON.parse(obj);
var instance = new MyClass;
instance._attr = obj.attr;
return instance;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21715 次 |
| 最近记录: |