静态私有字段Javascript
Static private field Javascript
我需要用唯一的name
初始化一些Objects
的构造函数。我写了一些这样的代码:
Obj.prototype.idCounter = 0;
Obj = function() {
this.name = "Obj_" + Obj.prototype.idCounter;
Obj.prototype.idCounter++;
}
var o1 = new Obj();
var o2 = new Obj();
alert(o1.name); // Obj_0
alert(o2.name); // Obj_1
但是Obj.prototype.idCounter
是非私有的。我知道如何创建私有变量,但不知道如何生成私有静态变量。
没有办法(据我所知)以您描述的方式复制私有静态成员。
为了解决id生成器的安全问题,您可以使用模块模式,并在模块范围内对其进行某种特权访问。
// using an immediately invoked function to generate the isolated scope
var Obj = (function () {
var idCounter = 0;
return function Obj() {
this.name = "Obj_" + idCounter;
idCounter++;
};
}());
var o1 = new Obj();
var o2 = new Obj();
alert(o1.name); // Obj_0
alert(o2.name); // Obj_1
您可以做的是:
var Obj = function() {
var idCounter = 0;
function Obj() {
this.name = "Obj_" + idCounter;
idCounter++;
}
return Obj;
}();
现在idCounter
是该匿名函数的局部变量,所以除了构造函数之外,其他任何函数都看不到它。
注意,你也可以在那里对原型对象进行一些初始化:
var Obj = function() {
var idCounter = 0;
function Obj() {
this.name = "Obj_" + idCounter;
idCounter++;
}
// one way to add a prototype property, and not
// the simplest
Object.defineProperties(Obj.prototype, {
getInstanceCount: {
value: function() {
return idCounter;
}
}
});
return Obj;
}();
现在,当您有一个Obj实例时,您可以调用getInstanceCount()
来获得创建的对象总数(这将是设计API的一种奇怪方式,但这只是为了说明原型函数也可以访问这些私有变量)。
在JavaScript中,通常在字段名前面加一个下划线_
,表示它们是私有的。当然,这并不能使它们真正私有化,但开发商应该表现出一定的自律性,并将其视为私有化。
function Obj() {
this.name = "Obj_" + (Obj._idCounter++);
}
Obj._idCounter = 0;
var o1 = new Obj();
var o2 = new Obj();
log(o1.name); // Obj_0
log(o2.name); // Obj_1
function log(x) { var p = document.createElement('pre'); p.appendChild(document.createTextNode(x)); document.body.appendChild(p); }
如果你真的想隐藏一些东西,你当然可以使用闭包,正如其他人所说的那样。然而,这有点难以调试,而且由于某种原因,调试速度有点慢。
相关文章:
- JavaScript 检查隐藏字段中的值并将其设置为隐藏字段值
- javascript中的表达式引擎字段
- 如何使用javascript var引用Mongo DB集合's字段
- SIMPLE Javascript代码,用于显示谷歌电子表格中单个字段的数据
- 如何使用javascript将字段强制设置为false
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- 如何验证日期、月份和日期的3个独立输入字段;年使用jquery或javascript
- 在使用javascript的输入字段中,只接受20的倍数(例如40,60,80)
- ASP.net Javascript函数中的隐藏字段为null
- 使用JavaScript获取隐藏的Django字段
- 时间字段上的JavaScript验证(不接受0:00格式)
- 删除创建的 JavaScript 字段集
- JSOUP:从HTML文档中解析Javascript字段
- 表单验证清除JavaScript字段
- 获取对象中具有特定名称的javascript字段
- 记录到控制台的JavaScript字段总是“未定义”
- Javascript字段验证表单
- 如何在不显式调用Javascript字段的情况下更新模型字段
- 仅供管理员编辑的Javascript字段
- 使用JavaScript字段填写并提交自动登录