繁体   English   中英

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

[英]what is the meaning of the following function syntax in nodejs?

我在 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

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

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

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

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

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

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

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

例子:

 var ENV_node = "the ENV_node value"; function test(envCtor) { var before = envCtor; envCtor = { node: ENV_node }[envCtor]; console.log(before + " -> " + envCtor); } test("node"); test("toString"); test("foo");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM