V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kidlj
V2EX  ›  Node.js

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

  •  
  •   kidlj · 2016-11-10 11:16:04 +08:00 · 1712 次点击
    这是一个创建于 2935 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先定义一个“类”:

    
    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 实战》书里的一个例子,书里的输出是没有原型上的方法的,只保存了实例属性。我这里的输出为什么有原型方法呢?

    3 条回复    2016-11-10 11:29:20 +08:00
    fds
        1
    fds  
       2016-11-10 11:22:58 +08:00   ❤️ 1
    可能是你用的 redis 库有更新。不过 redis 里存的都是字符串,所以一般也没人这么用。
    D3EP
        2
    D3EP  
       2016-11-10 11:24:54 +08:00 via Android   ❤️ 1
    关键看这个库的序列化方法吧,和 redis 没关系。
    kidlj
        3
    kidlj  
    OP
       2016-11-10 11:29:20 +08:00
    @fds 感谢!经你的提醒,我刚刚安装了和书上一样版本(旧)的 redis 库,测试下来果然没有保存 save 方法,确实是因为库更新造成的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   972 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:50 · PVG 03:50 · LAX 11:50 · JFK 14:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.