我正在尝试在Javascript中创建一个类(或者无论等价是什么),它将一个计数存储在一个类变量中,这样构造函数就可以为创建的对象分配一个id。如下所示:
Shift = function(hour) {
this.id = Shift.idCount;
Shift.idCount++;
}
但是我不知道idCount应该在哪里初始化甚至定义。有没有办法做到这一点?
答案 0 :(得分:1)
我用闭包来做:
var Shift = function() {
var idCount = 1; // initial id
return function Shift(hour) { // this is the actual constructor
this.id = idCount++;
// other initialization ...
};
}();
var aShift = new Shift(9);
alert(aShift.id); // 1
var anotherShift = new Shift(17);
alert(anotherShift.id); // 2
它使用匿名包装函数来提供可以维护计数器的闭包。匿名函数返回稍后将调用的实际构造函数。每次对构造函数的调用都会将计数器的当前值复制到新对象的“id”属性中,并将其递增。
请记住,当您学习JavaScript继承时,实际上并没有直接等同于C#或Java等语言中的“类”概念。尝试使JavaScript像那些语言一样,几乎总是以挫败感和心碎而结束。
答案 1 :(得分:1)
是的,请说
Shift.idCount = 0;
定义Shift
函数后。
允许您随时访问计数器的当前值(如果需要)。如果您不想要直接访问计数器的值,并且不希望其他任何人,则在Shift
内使用私有变量作为@Pointy提出。