有没有更好的方法来隐藏对象中的变量

时间:2017-01-17 13:04:23

标签: javascript private

假设您想要一个提供某些方法的单个 JavaScript对象,例如:

var a = {
    c: "hello",
    talk: function(){
        console.log(this.c);
    }
}

但是,您不希望人们能够直接访问c,您希望它是私有的。我已经找到了解决方案,但我不知道是否有更好的解决方案:

var a = new function(){
    var c = "hello";
    this.talk = function(){
        console.log(c);
    };
}

您能想到更好的解决方案吗?你能说出为什么会更好吗?

你能否指出这种方法给我的任何(性能,可控性或其他)麻烦?

我在这里留下一个额外的例子,我认为这可能在概念上很有用:

var Animation = {
    from_right: "translate(100%,0)",
    from_bottom: "translate(0,100%)",
    zoom: "translate(0,0) scale(0)",
    default: "translate(100%,0)",
    get_initial: function(type){
        switch (type) {
            case "from_right":
            case "from_bottom":
            case "zoom":
                return this[type];
                break;
            default:
                return this["default"];
                break;
        }
    },
    get_final: function(){
        return "translate(0,0) scale(1)";
    }
}

我知道这完全可以这样工作,但对我而言,从概念上讲,使用或查看它以将第一个配置属性作为私有变量时更清晰。例如,如果我记录动画并发现它有2个方法,我会更快地了解如何使用它,而不是打印所有那些不应被访问的属性。它不是关于如何做某事,而是关于如何做得更清楚和更好。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用IIFE制作一个闭包来保护您的变量



var MyClass = (function(){
    var myPrivate = "hello";
    return function(){
        this.talk = function(){
            console.log(myPrivate);
        };
    }
})();

var instance = new MyClass();
instance.talk();