Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为对象实例生成唯一ID?_Javascript_Arrays_Javascript Objects - Fatal编程技术网

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

Javascript 如何为对象实例生成唯一ID?,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我正在制作一个简单的视频游戏,我正在试图找到最好的方法来移除玩家库存中的对象 我想为每个游戏项目使用一个ID,但我不确定如何生成这些ID 显然,手动给每个实例一个唯一的Id是没有效率的 我在想,我可以在构造函数原型上添加一个属性,或者直接在构造函数本身上添加一个属性,称为generated,它随着从它创建的每个实例增加1,然后让每个实例返回并使用它作为其ID 或者,我可以在创建对象时为每个对象随机生成一个随机数,但是,即使有一个很大的数字,也很可能有多个具有相同ID的对象 如何向每个对象实例添加

我正在制作一个简单的视频游戏,我正在试图找到最好的方法来移除玩家库存中的对象

我想为每个游戏项目使用一个ID,但我不确定如何生成这些ID

显然,手动给每个实例一个唯一的Id是没有效率的

我在想,我可以在构造函数原型上添加一个属性,或者直接在构造函数本身上添加一个属性,称为generated,它随着从它创建的每个实例增加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;

使用带有计数器的闭包,该计数器在每次创建对象时递增,例如:

var item=(function(){
var id=0;
return function(name,...){
this.name=name
...
this.id=id;
++id; 
}
})()
//to remove an object use Array.splice()

你在问什么?删除一个对象或创建一个唯一的id?我想问的是如何为对象实例生成唯一的id您似乎已经对如何生成UID有了正确的想法。你真正需要的是一个全球数字,每当你需要一个新的ID时,这个数字就会增加。我可以给出一个更全面的解释,但我需要先问一下,你的游戏中的玩家库存是否有一个最大值。请避免使用大段,问题甚至不是你想要的…谢谢史密斯先生,我可以这样做,但问题是我有多种不同类型的项构造函数,如果我使用的是全局变量,而不是一些封装生成的属性。我认为这会使访问变得更加困难,因为我需要知道,对于每种不同的对象类型,使用不同的名称生成大约100个不同的变量。更可取的是,我可以使用相同的名称生成不同的属性,但这些属性是封装的,并且与之相关的对象实例可以轻松访问。