Redis 保存 Javascript 类实例会连同原型上定义的方法一并保存吗?

2016-11-10 11:16:04 +08:00
 kidlj

先定义一个“类”:


function User(obj) {
    for (var key in obj) {
        this[key] = ojb[key];
    }
}

再在原型上定义一个方法,该方法会将实例自身保存到 redis 里:

User.prototype.save = function(){
    redis_client.hmset('user111', this);
};

测试:

var tobi = new User({
    name: 'Tobi',
    pass: 'secret-passwd',
    age: '2'
});

tobi.save();

然后去到 redis-cli 里输出该对象,会发现连同原型上的 save 函数也保存了:

$ redis-cli

redis> hgetall user111

...
 5) "pass"
 6) "secret-passwd"
 7) "age"
 8) "2"
...
13) "save"
14) "function (){\r\n 
...

请注意上面输出的 13), 14) 部分,正是在原型上定义的方法。

这其实是《 Nodejs 实战》书里的一个例子,书里的输出是没有原型上的方法的,只保存了实例属性。我这里的输出为什么有原型方法呢?

1643 次点击
所在节点    Node.js
3 条回复
fds
2016-11-10 11:22:58 +08:00
可能是你用的 redis 库有更新。不过 redis 里存的都是字符串,所以一般也没人这么用。
D3EP
2016-11-10 11:24:54 +08:00
关键看这个库的序列化方法吧,和 redis 没关系。
kidlj
2016-11-10 11:29:20 +08:00
@fds 感谢!经你的提醒,我刚刚安装了和书上一样版本(旧)的 redis 库,测试下来果然没有保存 save 方法,确实是因为库更新造成的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/319490

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX