【发布时间】:2018-07-30 20:08:47
【问题描述】:
我想实现一个计数器,它将为类(和子类)的每个实例生成一个唯一 ID。
目前我使用这个:
class Item {
constructor(type) {
this.constructor.counter = (this.constructor.counter || 0) + 1;
this.type = type || "item";
this._id = this.type + "_" + this.constructor.counter;
console.log(this.id);
}
get id() {
return this._id;
}
}
class SubItem extends Item {
constructor() {
super("sub_item");
}
}
var test1 = new Item(); // <- "item_1"
var test2 = new Item(); // <- "item_2"
var test3 = new Item(); // <- "item_3"
var test4 = new Item(); // <- "item_4"
var test5 = new SubItem(); // <- "sub_item_5"
var test6 = new SubItem(); // <- "sub_item_6"
var test7 = new Item(); // <- "item_5"
var test8 = new Item(); // <- "item_6"
你看到问题了吗?如果我通过首先实例化一个 SubItem 来做到这一点,那么每个都可以正常工作......但是当我首先实例化“母类”时,计数器就坏了。有没有办法解决这个问题?
我正在寻找的行为是:
var test1 = new Item(); // <- "item_1"
var test2 = new Item(); // <- "item_2"
var test3 = new Item(); // <- "item_3"
var test4 = new Item(); // <- "item_4"
var test5 = new SubItem(); // <- "sub_item_1"
var test6 = new SubItem(); // <- "sub_item_2"
var test7 = new Item(); // <- "item_5"
var test8 = new Item(); // <- "item_6"
【问题讨论】:
-
我已编辑(现已删除)评论,您将我的答案直接放入您的问题中。如果该评论不正确,请将其编辑为您的问题或编辑您的问题以实际说明您的预期输出。您现在的答案是在不同的假设下运行的。
-
为什么当前行为存在问题?我建议不要(ab)使用实例 UID 来区分子类。
标签: javascript class instance counter uniqueidentifier