Javascript 每个扩展类的唯一ID

Javascript 每个扩展类的唯一ID,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,我有一个用Coffeescript编写的baseCollection和baseModel主干,如下所示: class Collection extends Backbone.Collection constructor: (attrs = {}, options = {}) -> return attrs if attrs instanceof Collection return self if self = constructorCheck attrs, options

我有一个用Coffeescript编写的baseCollection和baseModel主干,如下所示:

class Collection extends Backbone.Collection

  constructor: (attrs = {}, options = {}) ->
   return attrs if attrs instanceof Collection
   return self if self = constructorCheck attrs, options

   super attrs
   constructorCreate @, attrs, options
所有模型/集合都从这些基本单元扩展而来。是否可以为扩展自这些基类的每个类创建唯一ID?比如:

class Animals extends Collection --> given a uniqueID
class Monkeys extends Animals --> given a uniqueID
目标是从缓存所有模型和集合的通用集合存储中筛选集合/模型。我想按照本节中的描述重新创建模型存储

我不确定我是否完全理解,但我猜您正在尝试创建一种方法来访问跨视图的动物和猴子集合的单例实例

如果是这样的话,下面是我对coffeescript的第一次尝试——听起来与您要寻找的模式并不完全相同,而是coffeescript/javascript中的一个选项

class Registry
  find: (t) ->
    lookup = @lookup ||= {}
    lookup[t] ||= new t

class People extends Backbone.Collection
class Things extends Backbone.Collection

r = new Registry

p = r.find(People)
p2 = r.find(People)
t = r.find(Things)
t2 = r.find(Things)

if p != p2 || t != t2 || p == t
  alert('failure')
else
  alert('pass')
然而,为了更接近我第一次阅读的方式来回答您的问题,下面是如何为每个扩展类生成唯一的id。我不完全确定这是您真正想要的,尽管每个集合都是自己的实例/不会在视图之间同步(但是,相同“类型”的所有集合都将具有相同的“myId”)


我自己可能不会采用后一种方法,但它应该会起作用。

你的意思是像但对于集合吗?是的,但是对于构造函数,而不是实例
index = 0
lookup = {}

class MyCollection extends Backbone.Collection
  constructor: ->
    f = arguments.callee.caller
    if(lookup[f]?)
      @myId = lookup[f]
    else
      lookup[f] = index
      @myId = index
      index += 1

class People extends MyCollection
class Things extends MyCollection

p = new People()
p2 = new People()
t = new Things()
t2 = new Things()

if p.myId != p2.myId || t.myId != t2.myId || p.myId == t.myId
  alert('failure')
else
  alert('pass')