[英]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.