Javascript 如何在coco中生成循环中的函数?

Javascript 如何在coco中生成循环中的函数?,javascript,coco,Javascript,Coco,我想在循环中生成函数: for own k, v in t ctor::[k] = -> v(...) @ 然而,coco似乎只生成一个函数并重用它: var k, v, __ref, __own = {}.hasOwnProperty; for (k in __ref = t) if (__own.call(__ref, k)) { v = __ref[k]; ctor.prototype[k] = __fn; } function __fn(){ v.

我想在循环中生成函数:

for own k, v in t
  ctor::[k] = ->
    v(...)
    @
然而,coco似乎只生成一个函数并重用它:

var k, v, __ref, __own = {}.hasOwnProperty;
for (k in __ref = t) if (__own.call(__ref, k)) {
  v = __ref[k];
  ctor.prototype[k] = __fn;
}
function __fn(){
  v.apply(this, arguments);
  return this;
}
如何更改coco脚本以使输出如下:

var k, v, __ref, __own = {}.hasOwnProperty;
for (k in __ref = t) if (__own.call(__ref, k)) {
  v = __ref[k];
  ctor.prototype[k] = function() {
    v.apply(this, arguments);
    return this;
  }
}

澄清:对于coco,我指的是这种语言:(一种咖啡脚本叉)。

这是一种功能。在循环中直接编写
函数
几乎总是应该避免的。JSLint禁止它说“不要在循环中生成函数”

您的代码尤其有一个范围bug(动态创建的方法中的所有
v
都将引用相同的值)。您应该使用
let
绑定:

for own k, v in t
  let
    ctor::[k] = ->
      v ...
      this
其汇编目的是:

var k, v, __ref, __own = {}.hasOwnProperty;
for (k in __ref = t) if (__own.call(__ref, k)) {
  v = __ref[k];
  (__fn.call(this, k, v));
}
function __fn(k, v){
  ctor.prototype[k] = function(){
    v.apply(this, arguments);
    return this;
  };
}

你说的是“可可”吗?@Pointy:我想是的,是咖啡叉,thx@Matt。