代码之家  ›  专栏  ›  技术社区  ›  isnvi23h4

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

  •  0
  • isnvi23h4  · 技术社区  · 10 年前

    我在一个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 回复  |  直到 10 年前
        1
  •  4
  •   T.J. Crowder    6 年前

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

    已确定 envCtor 是字符串,它将其设置为:

    • ENV_node (如果 环境管理器 "node" ),或
    • 标准对象属性(例如 Object.prototype )如果 环境管理器 "toString" , "valueOf" ,等,或
    • undefined

    (我不能保证他们是故意做第二件事的,因为他们是做什么的 环境管理器 稍后。:-) toString 不是构造函数。)

    这个 方法 它是通过创建一个具有“自己”属性的对象来实现的, node ,然后是通常的继承属性集,然后查找名称与 环境管理器 一串下面是一个分为几个部分的版本:

    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];
        console.log(before + " -> " + envCtor);
    }
    test("node");
    test("toString");
    test("foo");
    推荐文章