- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
根据 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;
这被称为解构赋值,是 ES2015 (ES6) 中的新事物,在此处进行了描述:Destructuring Assignment在 MDN 上。它允许使用各种快捷方式将源对象中的一个或多个属性分配给各种类型的目标。在这种情况下,源对象是 require('child_process')
的结果,所需的目标是一个名为 exec
的变量,它从来源。
当您指定多个属性时,它会变得更加有用:
const { exec, spawn, fork } = require('child_process');
这将创建名为 exec
、spawn
和 fork
的模块级变量,其中包含从子进程模块导出的属性。在解构赋值之前,一个人会做:
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()
来使用这些方法。如您所见,解构赋值是一个重要的捷径。解构有多种形式,您可以做更高级的事情,例如指定接收变量的名称与命名的属性不同,解构可用于数组,而不仅仅是对象。
以下是关于该主题的其他几篇引用文章:
Destructuring and parameter handling in ECMAScript 6
关于node.js - NodeJS 不寻常的 Require - 这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47356031/
我是一名优秀的程序员,十分优秀!