我想在CoffeeScript类上模仿ActiveRecord scopes。
在定义@scope
函数时,上下文是什么让我失望。 @scope
函数本身应该在底层类的上下文中执行,但它传递的函数应该在该实例的上下文中运行。
这就是我所拥有的,但popped
函数最终在Window的上下文中运行,而不是在调用它的实例中运行。
class Collection
models: []
@scope: (name, funct) ->
@.prototype[name] = ->
new @constructor(funct())
constructor: (models) ->
@models = models
class Bubbles extends Collection
@scope 'popped', ->
@models.slice(1, @models.length)
first: ->
@models[0]
console.log(new Bubbles([1,2,3,4]).popped()) # should return an instance of Bubbles with models == [2,3,4]