我正在构建一个简单的视频游戏,我正试图找到从玩家库存中删除对象和阵列的最佳方法。
我想为每个游戏项目使用ID,但我不确定如何生成这些ID。
显然,手动为每个实例提供唯一ID是不会有效的。
我在想我可以在构造函数原型上添加一个属性,或者直接在构造函数本身上添加一个属性,调用generate,从每个实例创建后增加1,然后让每个实例都备份并使用它作为其ID 。
或者我可以随意为每个对象创建一个随机数,但是即使数量很大,你也可能拥有多个具有相同ID的对象。
如何为每个对象实例添加唯一ID?
function Item(name,weight,value,description,type){
this.name=name;
this.weight = weight;
this.value=value;
this.description=description;
this.type=type;
this.id= this.generated;/*"this" here obviously means the a property immediately on the object its self on not something further up the chain*/
this.generated+=1;
}
Item.prototype.generated=0;
function Item(name,weight,value,description,type){
this.name=name;
this.weight = weight;
this.value=value;
this.description=description;
this.type=type;
this.id= this.__proto__.constructor.generated;/* this doesnt work either I'm assuming maybe because the constructor and __proto__ properties are added after everything in the constructor function runs, so its undefined?*/
this.__proto__.constructor.generated+=1;
}
Item.generated=0;
答案 0 :(得分:1)
使用带有计数器的闭包,每次创建对象时该计数器都会递增:
var item=(function(){
var id=0;
return function(name,...){
this.name=name
...
this.id=id;
++id;
}
})()
//to remove an object use Array.splice()