在Node中,为什么“需要”分配有时需要大括号?

时间:2019-06-21 11:12:55

标签: node.js import requirejs export

通过Chai运行一些测试,我发现在此代码下测试将失败:

#include "pch.h"
#include <iostream>

using namespace std;

struct point {
    float x, y;
};

class Quadrangle
{
public:
    void init() // sets coordinates for A, B, C, D
    {
        cout << "Input A coordinates (x, y): ";
        cin >> A.x >> A.y;
        cout << "Input B coordinates (x, y): ";
        cin >> B.x >> B.y;
        cout << "Input C coordinates (x, y): ";
        cin >> C.x >> C.y;
        cout << "Input D coordinates (x, y): ";
        cin >> D.x >> D.y;
    };

    void square()
    {
        // square calculation
    };

private:
    point A, B, C, D;
};

class Rectangle : public Quadrangle
{
public:
    void square()
    {
        // square calculation
    };

private:
    point A, B, C, D;
};

但是它会通过以下内容:

const add = require('./addition');
//'add is not a function error' even though it's directly exported as a function

但是在使用npm模块时,所有内容都声明为不带括号:

const {add} = require('./addition');

这些本质上是具有多个属性的对象,可以访问。为什么这样工作?仅仅是必须明确指定为对象的函数导出吗?

1 个答案:

答案 0 :(得分:2)

这称为对象分解。请参阅link

例如,您已经导出了一个名为sampleFunctions.js的文件,该文件具有以下导出功能

function function1(params) {};
function function2(params) {};

module.exports = {
sampleFunc1: function1,
sampleFunc2: function2
}

现在,当您需要它时,有两种方法-

  • 当您只需要一个功能(使用对象分解)时
let {sampleFunc1} = require('./sampleFunctions');
sampleFunc1();

在这种情况下,您仅公开了所需的功能,而不公开从该文件导出的所有功能。

  • 当您需要该文件中的所有功能时
let sampleFuncs = require('./sampleFunctions');
let samFunc1 = sampleFuncs.sampleFunc1;
samFunc1()