【发布时间】:2018-05-08 14:59:24
【问题描述】:
private的概念我不清楚,如果我仍然可以通过public方法访问它并重新定义模块的属性。我的意思是,我完全可以做到:
var aModule = (function() {
var privateVar = 1;
return {
publicFunction: function() {
return privateVar;
}
}
})();
aModule.publicFunction = function() {
privateVar = function() {
console.log('a new content');
}
privateVar();
};
aModule.publicFunction(); // 'a new content'
我知道如果我在 ES6 中使用 let 或 const 编写它是不可能的,因为尝试覆盖私有变量的值时会出错,但它在 ES5 中有什么意义?
【问题讨论】:
-
在 javascript 中,“私有变量”的概念更像是一个松散的想法。这些变量被认为是私有的,因为它们不能从它自己的范围之外访问。它们通常以区分字符开头,例如
_privateVar。 -
不,您不能覆盖
privateVar。你所做的是覆盖publicFunction(使用全局的、不同的“privateVar”)
标签: javascript design-patterns module private