nodejs中以下函数语法的含义是什么?

时间:2016-01-20 18:32:44

标签: javascript node.js

我在nodejs项目中遇到了以下函数调用。

var setEnv = function(envCtor) {
  if (typeof envCtor == 'string') {
    envCtor = ({
      node: ENV_node
    })[envCtor];
  }

  ENV = new envCtor({
    foo: foo,
    bar: bar
  });
  this.__env = ENV;
  this.__dir = ENV.getCwd();
};

function ENV_node() {
  //some code
};

setEnv('node');

我没有得到语法,有人可以帮我理解这个函数的内容吗? TIA

1 个答案:

答案 0 :(得分:4)

  

我首先想了解envCtor = ({ node: ENV_node })[envCtor];正在做什么

确定envCtor是一个字符串后,它将其设置为:

  • ENV_node(如果envCtor"node")或
  • 标准对象属性(例如,Object.prototype上的任何属性)如果envCtor"toString""valueOf"等,或
  • undefined

(我不能保证他们故意做第二个,因为他们后来对envCtor做了什么。:-) toString不是构造函数。)

它正在做的方式是通过创建一个具有一个“自己”属性的对象node,然后是通常的一组继承属性,然后查找属性的值其名称与envCtor字符串匹配。这是一个版本分为几个部分:

var tempObj = {node: ENV_node};
var newValue = tempObj[envCtor];
envCtor = newValue;

()的原因是避免与创建块而不是使用{node: ENV_node}的对象混淆。但是,它们并不是真正的需要,它们可以被删除。解析器不会将{视为块的开头,因为它出现在赋值运算符的右侧。

示例:

var ENV_node = "the ENV_node value";
function test(envCtor) {
  var before = envCtor;
  envCtor = { node: ENV_node }[envCtor];
  snippet.log(before + " -> " + envCtor);
}
test("node");
test("toString");
test("foo");
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>