首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使对象成为方法常量,而不是JavaScript/coffeescript中的闭合值

问使对象成为方法常量,而不是JavaScript/coffeescript中的闭合值
EN

Stack Overflow用户
提问于 2016-01-23 05:30:57
回答 1查看 54关注 0票数 1

我有以下JS:

代码语言:javascript
复制
for (k in tools) {
  tool = tools[k];
  this["switch_to_" + tool.name] = (function(_this) {
    return function() {
      return _this.switch_tool(tool);
    };
  })(this);
}

从此coffeescript生成:

代码语言:javascript
复制
for k,tool of tools
  @["switch_to_#{tool.name}"] = =>
    @switch_tool(tool)

这应该做的是生成用于在工具对象之间切换的实例方法。在调用每个不同的switch_to_方法时,tool不会引用每个不同的工具对象,而是最终引用闭包中剩下的任何tool值。

我想做的是让tool成为方法中的一个常量。这个是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2016-01-23 05:40:42

来自Coffee文档:

当使用JavaScript循环生成函数时,通常会插入一个闭包包装器,以确保循环变量是封闭的,并且所有生成的函数都不只是共享最终值。CoffeeScript提供了do关键字,该关键字可以立即调用传递的函数,并转发任何参数。

所以你的解决方案是

代码语言:javascript
复制
for k,tool of tools
  do (tool) ->
    @["switch_to_#{tool.name}"] = =>
      @switch_tool(tool)

它生成以下JS (您可以看到它现在工作的原因):

代码语言:javascript
复制
var fn, k, tool;

fn = function(tool) {
  return this["switch_to_" + tool.name] = (function(_this) {
    return function() {
      return _this.switch_tool(tool);
    };
  })(this);
};
for (k in tools) {
  tool = tools[k];
  fn(tool);
}

根据您的情况,您可能需要在do之后使用fat数组=>。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34956284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档