javascript类中的自动增量值

javascript类中的自动增量值,javascript,class,oop,object,increment,Javascript,Class,Oop,Object,Increment,我试图在每次实例化该类的新实例时自动递增属性值。这就是我的类构造函数的外观(我将其抽象了一点): var Playlist=函数(播放器,参数){ var=这个; this.id=?;//应自动递增 this.tracks=[]; this.ready=false; this.unload=args.length; this.callback=未定义; this.onready=函数(c){ 即:回调=c; }; this.add=函数(轨道){ 对于(变量i=0;i0){ 那是什么; 如果(t

我试图在每次实例化该类的新实例时自动递增属性值。这就是我的类构造函数的外观(我将其抽象了一点):

var Playlist=函数(播放器,参数){
var=这个;
this.id=?;//应自动递增
this.tracks=[];
this.ready=false;
this.unload=args.length;
this.callback=未定义;
this.onready=函数(c){
即:回调=c;
};
this.add=函数(轨道){
对于(变量i=0;i0){
那是什么;
如果(that.unload==0){
那是真的;
那是callback();
}
}
});
};
player.playlists.push(这个);
返回此。添加(args);
};
var playl1=新播放列表(播放器,[url1,url2…])//应为ID 0
var playli2=新播放列表(播放器,[url1,url2…])//应该是ID 1
我不想定义在全局范围内递增的初始变量。谁能给我指一下正确的方向吗?干杯

您可以使用创建一个可以递增的私有变量

var Playlist = (function() {
  var nextID = 0;
  return function(player, args) {
    this.id = nextID++;
    ...
  };
})();

您可以在代码中的某个地方设置
Playlist.id=0
,然后在构造函数中递增它,并将新值分配给实例属性,如下所示:
this.id=Playlist.id++

这是因为它没有很好地封装,因此可能被误用


否则,我会提出Mike C描述的解决方案,但他已经给出了一个很好的答案,其中包含了这样一个想法,所以…

这将如何工作?
播放列表(构造器)是否在初始化之间保留数据?我认为ES6生成器函数是这样的,你真的能在ES6之外做到吗?
Playlist
是一个函数,也就是一个对象,你可以设置它的任何属性,并从构造函数中自由访问它。为什么不呢?对象
Playlist
在函数
Playlist
@sg.cc的不同调用之间不会发生变化,只要将其分配给
Playlist
它就与您执行的
var stuff={}相同;stuff.id=0。正如skypjack所说,它只是一个物体。我认为它是一个构造函数,而不是一个对象。谢谢大家!@sg.cc两者都有。每个功能都是一个对象,但不是每个对象都是一个功能。这就像一个符咒!我仍然不完全明白怎么做,但我相信我会想办法的。谢谢@菲尔诅咒道,小心点。你会上瘾的,哈哈。我认为在解释它们的功能方面做得相当好。@crusedphil在下面你可以看到Mike C提供的代码是如何工作的,在创建这些私有环境时非常有趣,干杯。
var Playlist = (function() {
  var nextID = 0;
  return function(player, args) {
    this.id = nextID++;
    ...
  };
})();