假设您想要一个提供某些方法的单个 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个方法,我会更快地了解如何使用它,而不是打印所有那些不应被访问的属性。它不是关于如何做某事,而是关于如何做得更清楚和更好。
谢谢!
答案 0 :(得分:0)
您可以使用IIFE制作一个闭包来保护您的变量
var MyClass = (function(){
var myPrivate = "hello";
return function(){
this.talk = function(){
console.log(myPrivate);
};
}
})();
var instance = new MyClass();
instance.talk();