如何为对象实例生成唯一ID?

时间:2017-09-05 08:43:47

标签: javascript arrays javascript-objects

我正在构建一个简单的视频游戏,我正试图找到从玩家库存中删除对象和阵列的最佳方法。

我想为每个游戏项目使用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;

1 个答案:

答案 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()