【发布时间】:2012-04-21 04:46:21
【问题描述】:
我这里有这段代码:
var Person = (function() {
var name;
var PersonConstructor = function(n) {
name = n;
};
PersonConstructor.prototype.getName = function() {
return name;
};
return PersonConstructor;
})();
var people = [];
var person1 = new Person("Foo");
var person2 = new Person("Bar");
alert(person1.getName()); // I want it to be Foo
people.push(person1);
people.push(person2);
我从here. 得到了模拟类的想法。但是当然,我忽略了私有变量var name;也是一个静态变量的事实。由于这阻碍了我目前的努力,我想知道是否有办法在这个例子中保持私人行为但避免静态行为?
【问题讨论】:
-
你不能让原型函数在构造函数中引用局部变量。我会远离在 JavaScript 中模拟可见性的方法。这不是语言的一部分,并且产生的问题多于它的帮助。使用适当的文档,将属性标记为
@private,并根据代码的用例,使用 Google 的 Closure 编译器之类的工具仅通过其实际名称公开公共属性。
标签: javascript static private encapsulation members