NodeJS不寻常的要求 – 这里发生了什么?
请参阅https://nodejs.org/api/child_process.html上的文档
接下来会发生什么?为什么这样做?
const { exec } = require('child_process');
根据我的理解,这只是将exec包装到另一个对象中
var a = { exec } // a is now { exec: exec }
但是那里有一个任务.. -Mind Blown-
你的代码示例:
const { exec } = require('child_process');
产生与以下相同的结果:
const exec = require('child_process').exec;
这被称为解构赋值 ( destructuring assignment) ,在ES2015(ES6)中是一个新东西,在这里描述:MDN上的解构赋值 。 它允许将源对象的一个或多个属性分配给各种types的目的地的各种快捷方式。 在这种情况下,源对象是require('child_process')
的结果,而所需的目标是一个名为exec
variables,它将从源接收一个命名属性。
当您指定多个属性时,它变得更加有用:
const { exec, spawn, fork } = require('child_process');
这将创build名为exec
, spawn
和fork
模块级variables,其中包含subprocess模块的这些导出属性。 在解构任务之前,你可以完成:
const child = require('child_process'); const exec = child.exec; const spawn = child.spawn; const fork = child.fork;
或者会刚刚做到这一点:
const child = require('child_process');
然后,使用child.exec()
和child.spawn()
和child.fork()
来使用这些方法。 正如你所看到的,解构赋值是一个重要的捷径。 解构有许多forms,你可以做更多高级的事情,比如指定接收variables的名称与指定的属性不同,解构可以和数组一起使用,而不仅仅是对象。
以下是有关该主题的其他几篇参考文章:
ECMAScript 6中的解构和参数处理
代码ECMAScript 6中的破坏示例
解构的解释
这是ES6规范的特殊符号。 在这里,您将提取具有相同名称的variables中的require对象的属性exec
的值。
const { exec } = require('child_process'); // Equals const exec = require('child_process').exec;
你可以提取一个像这样的对象的索姆属性。
const { exec, spawn, fork } = require('child_process'); let { a, b } = { a: 'foo', b: 'bar' };
加载库时特别有用。
这是调用解构赋值