首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript中的隐私保护方法

JavaScript中的隐私保护方法
EN

Code Review用户
提问于 2013-07-29 18:12:34
回答 1查看 78关注 0票数 0

我想出了一个在JavaScript中增加隐私支持的想法。我还没有在网上发现类似的东西,所以我想这可能是因为这个想法很糟糕,但我还是想看到一些回应,只是为了确定一下。

代码语言:javascript
复制
var util = {
    s4: function() {
        return Math.floor((1 + Math.random()) * 0x10000)
                    .toString(16)
                    .substring(1);
    },

    guid: function() {
        return util.s4() + util.s4() + '-' + util.s4() + '-' + util.s4() + '-' +
                util.s4() + '-' + util.s4() + util.s4() + util.s4();
    }
};

// template
var Class = (function() {
    var privates = {};
    var getPrivates = function(obj) {
        return privates[ obj.getGUID() ];
    };

    function Class() {
        var guid = util.guid();
        privates[guid] = {};
        this.getGUID = function() {
            return guid;
        };
    };

    return Class;
})();

var MyClass = (function() {
    var privates = {};
    var getPrivates = function(obj) {
        return privates[ obj.getGUID() ];
    };

    function MyClass(a, b) {
        var guid = util.guid();
        privates[guid] = {};
        this.getGUID = function() {
            return guid;
        };

        var private = getPrivates(this);
        private.a = a;
        this.b = b;
    };

    return MyClass;
})();

var obj = new MyClass("private", "public");
console.log(obj.a, obj.b);
EN

回答 1

Code Review用户

发布于 2014-08-06 13:10:23

有趣的问题,

正如评论中提到的,隐私支持可以(更好)通过模块或IFFE实现。

总的来说,您的设计是不健全的,您的GUID创建代码在生成唯一id的过程中非常薄弱,您将有重叠的GUID和(难以再现)的错误。

此外,如果可以在privates上迭代并查看存储在其中的所有值,则变量并不完全是私有的。

最后,我认为你可能有一个很好的理由来完成双重任务,这个

代码语言:javascript
复制
var MyClass = (function() {
    var privates = {};
    var getPrivates = function(obj) {
        return privates[ obj.getGUID() ];
    };

    function MyClass(a, b) {
        var guid = util.guid();
        privates[guid] = {};
        this.getGUID = function() {
            return guid;
        };

        var private = getPrivates(this);
        private.a = a;
        this.b = b;
    };

    return MyClass;
})();

可能是

代码语言:javascript
复制
var MyClass = (function() {
    var privates = {};

    function MyClass(a, b) {
        var private = privates[util.guid()] = {};
        private.a = a;
        this.b = b;
    };

    return MyClass;
})();

从棉/暗示的角度看,你遇到了一些分号问题,但也没什么不好的。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/29323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档