Coffeescript 原型生成方法

Coffeescript 原型生成方法,coffeescript,Coffeescript,我试图在coffeescript类上生成方法,如下所示: class Test log: (msg...) -> for m in msg console.log(m) for alias in ['one', 'two', 'three', 'four', 'five'] Test::[alias] = (v...) -> o = {} o[alias] = v[0] Test::log.apply(@,

我试图在coffeescript类上生成方法,如下所示:

class Test
  log: (msg...) ->
    for m in msg
      console.log(m)

  for alias in ['one', 'two', 'three', 'four', 'five']
     Test::[alias] = (v...) ->
      o = {}
      o[alias] = v[0]
      Test::log.apply(@, [o].concat(v.slice(1)))

t = new Test()
t.one(1)
t.two(3)
出于我完全无法理解的原因,这张照片打印出来了

{ five: 1 }
{ five: 2 }
而不是我所期望的,是:

{ one: 1 }
{ two: 2 }

这里我遗漏了什么?

问题是,在
for
循环的每次迭代中,您都将
alias
变量绑定到新值。所以,当调用
t.one(1)
方法时,
alias
变量绑定到
'five'

有两种方法可以解决此问题

第一个解决方案是使用:

第二种解决方案是使用coffee脚本
do
语句创建一个闭包:

for alias in ['one', 'two', 'three', 'four', 'five']
  Test::[alias] = do (alias) -> (v...) ->
    // ..
for alias in ['one', 'two', 'three', 'four', 'five']
  Test::[alias] = do (alias) -> (v...) ->
    // ..