有没有办法从 class 中计算实例?
Is there a way to count instances from a class?
我需要跟踪在上述 class 中创建了多少个 class 实例。我需要每个实例本身就知道 'which one' 它是。
我能想到的唯一方法是使用全局变量,但是...可能有更好的方法。
这是我想避免的:
class MyClass {
this.instanceId = (window.instanceCount == undefined) ? 0 : window.instanceCount + 1;
window.instanceCount = this.instanceId;
...
}
你可以使用static
属性并在constructor()
中增加它
class MyClass{
static count = 0;
constructor(){
this.instanceId = ++MyClass.count;
}
}
let x = new MyClass();
let y = new MyClass();
console.log(MyClass.count) //2
console.log(x.instanceId); //1
console.log(y.instanceId); //2
属性 不必在全局范围内:
class MyClass {
static count = 0;
instanceId = MyClass.count++;
}
您可以向 "class" 静态添加一个计数器。这里我使用一个符号来防止名称冲突。请注意,在递增计数器之前,我会检查您是将 Burrito
用作函数还是 class。
function Burrito() {
if (this instanceof Burrito) {
Burrito[Burrito.counterName]++;
}
}
Burrito.counterName = Symbol();
Burrito[Burrito.counterName] = 0;
Burrito.count = () => Burrito[Burrito.counterName];
new Burrito(); // 1
new Burrito(); // 2
Burrito(); // skipped
new Burrito(); // 3
console.log(Burrito.count());
我需要跟踪在上述 class 中创建了多少个 class 实例。我需要每个实例本身就知道 'which one' 它是。
我能想到的唯一方法是使用全局变量,但是...可能有更好的方法。
这是我想避免的:
class MyClass {
this.instanceId = (window.instanceCount == undefined) ? 0 : window.instanceCount + 1;
window.instanceCount = this.instanceId;
...
}
你可以使用static
属性并在constructor()
class MyClass{
static count = 0;
constructor(){
this.instanceId = ++MyClass.count;
}
}
let x = new MyClass();
let y = new MyClass();
console.log(MyClass.count) //2
console.log(x.instanceId); //1
console.log(y.instanceId); //2
属性 不必在全局范围内:
class MyClass {
static count = 0;
instanceId = MyClass.count++;
}
您可以向 "class" 静态添加一个计数器。这里我使用一个符号来防止名称冲突。请注意,在递增计数器之前,我会检查您是将 Burrito
用作函数还是 class。
function Burrito() {
if (this instanceof Burrito) {
Burrito[Burrito.counterName]++;
}
}
Burrito.counterName = Symbol();
Burrito[Burrito.counterName] = 0;
Burrito.count = () => Burrito[Burrito.counterName];
new Burrito(); // 1
new Burrito(); // 2
Burrito(); // skipped
new Burrito(); // 3
console.log(Burrito.count());