Coffeescript 类构造新实例的方法
我想在CoffeeScript课程上模仿 让我感到困惑的是定义Coffeescript 类构造新实例的方法,coffeescript,Coffeescript,我想在CoffeeScript课程上模仿 让我感到困惑的是定义@scope函数时的上下文。@scope函数本身应该在底层类的上下文中执行,但它传递的函数应该在该实例的上下文中运行 这里是我所拥有的,但是弹出的函数最终在窗口的上下文中运行,而不是在调用它的实例中运行 class Collection models: [] @scope: (name, funct) -> @.prototype[name] = -> new @constructor(fun
@scope
函数时的上下文。@scope
函数本身应该在底层类的上下文中执行,但它传递的函数应该在该实例的上下文中运行
这里是我所拥有的,但是弹出的函数最终在窗口的上下文中运行,而不是在调用它的实例中运行
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]
问题是您正在以简单函数的形式调用funct
:
new @constructor(funct())
因此,@
内的函数
将成为窗口
。您可以使用或指定@
应该是什么(即作为方法调用函数):
请注意,我还切换到了:
,因为这是比prototype
更地道的咖啡脚本
演示:
@scope: (name, funct) ->
@::[name] = ->
new @constructor(funct.apply(@))