当前位置: 首页 > 面试题库 >

在自定义类上使用JSON.stringify

徐俊楚
2023-03-14
问题内容

我试图将对象存储在redis中,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'"

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;
    }
}

我正在尝试说明一个函数,该函数除了执行其他操作外,还可以在每次调用时计算计数或平均值。


问题答案:

首先,您没有定义类。

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

使用时将被剥离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());

将输出:

true "foo"


 类似资料:
  • 本章节中,简述自定义类的创建和使用方法,供参考。 创建自定义类 用户可以定义自己的类,通过继承 ThingJS 内部类(比如:Thing 类),对 ThingJS 进行扩展和封装。 我们推荐使用 ES6 语法定义一个类。例如,自定义汽车类 Car。 // 继承 Thing 类 class Car extends THING.Thing { constructor(app) { super(

  • 我正在编写一个代码,它取两个点,确定两个点的大小,比较它们,并返回哪个更大。我有我的主类和方法来运行所有的东西,然后还有另一个类点来实现我的接口。但是,我无法使从接口调用的方法正常工作。我的代码是: 当我尝试运行它时,我得到错误“exception in thread”main“java.lang.nullPointerException:不能调用”point.getMetality()“,因为”

  • 问题内容: 假设我有一个文件一个简单的Python类定义myClass.py 而且我也有两个测试脚本。所述第一脚本创建类型测试的目的,填充阵列A,和泡菜的结果到一个文件。它立即从文件unpickles它并仍在填充阵列。第二脚本刚刚从文件unpickles,和 未填充的阵列(即A == [])。 为什么是这样? test1.py 和test2.py 问题答案: 这是因为你设置的一类属性,而不是一个实

  • 自定义缓存类使用说明 phpGrace 1.2.1 版本新增了自定义缓存类的功能,您可以将某个相同类型的缓存封装为一个类文件,便于项目的复用 (: 实现步骤 在 phpGrace/caches/ 文件夹下创建您的自定义缓存类文件 文件命名规则 : 缓存类名称.php 类命名规则 : class 缓存类名称 extends \cacheBase{} 使用命名空间 : namespace phpG

  • Youtrack上有几种类型,如OwnedField[1]、Group[1]等。 是否可以创建一个自定义类型,该类型具有自定义字段,如ownedField具有链接到用户的自定义字段? 我们希望将类似的行为应用于ownedField,其中,当您选择一个子系统字段(类型为ownedField)时,它会“自动”用与该子系统关联的用户填充问题的字段“受理人”。

  • 我使用员工作为模型来处理用户名和密码。它确实重定向到正确的控制器和操作,但是$this- 雇员控制员 应用控制器 打印$this的\u r- 数组