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.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,我指的是这种语言:http://satyr.github.com/coco/ (coffeescript fork )。

最佳答案

这是一个功能。几乎总是应该避免直接在循环中编写function。 JSLint 禁止它说“不要在循环内创建函数。”

您的代码尤其存在范围错误(动态创建的方法中的所有 v 将引用相同的值)。您应该在那里使用 let 绑定(bind):

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;
  };
}

关于javascript - 如何在coco中循环生成函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10191806/

相关文章:

python - COCO 对掩模的注释 - 例如分割模型训练

javascript - 如何在DataTable View 中显示json数据?

javascript - 如何在 nuxt 中克隆带有函数的 vue 元素?

javascript - 如何定义easyui面板的左上角

JavaScript 验证货币金额

javascript - 在 HTML 页面上的同一位置隐藏和显示按钮

具有固定范围的 CoffeeScript 兼容 fork ?