我应该什么时候在Javascript中创建新对象?

我应该什么时候在Javascript中创建新对象?,javascript,node.js,Javascript,Node.js,我用这个包裹发送电子邮件。首先,我需要创建一个新的mailgun实例,然后使用它发送电子邮件,这是我代码的一个简单版本: const mgInstance = mailgun({ apiKey: '...', domain: '...', }); function sendMail1() { mgInstance.messages().send(/* ... */); } function sendMail2() { mgInstance.messages().send(/*

我用这个包裹发送电子邮件。首先,我需要创建一个新的
mailgun
实例,然后使用它发送电子邮件,这是我代码的一个简单版本:

const mgInstance = mailgun({
  apiKey: '...',
  domain: '...',
});

function sendMail1() {
  mgInstance.messages().send(/* ... */);
}

function sendMail2() {
  mgInstance.messages().send(/* ... */);
}
这段代码运行良好。我只是想知道是否将用于创建新的
mailgun
实例的代码移动到每个函数中,如下所示:

function sendMail1() {
  const mgInstance = mailgun({
    apiKey: '...',
    domain: '...',
  });

  mgInstance.messages().send(/* ... */);
}

function sendMail2() {
  const mgInstance = mailgun({
    apiKey: '...',
    domain: '...',
  });

  mgInstance.messages().send(/* ... */);
}

我的问题是:这些实现之间有什么区别吗?它们之间有更好的吗?

鉴于
mailgun
工厂功能足够轻量级,我会使用包装工厂:

function getMailerInstance() {
  return mailgun({
    apiKey: '...',
    domain: '...'
  });
}

function sendMail1() {
  const mgInstance = getMailerInstance();

  mgInstance.messages().send(/* ... */);
}
通过这种方式,您还可以轻松地切换到单例模式,或者在调用
mailgun
等之前执行其他计算逻辑

我还将创建一个通用的
sendMail
函数来处理。。。发送邮件,让其他函数调用,而不是直接使用Mailgun的API。因此,如果需要切换邮件API,只需更改代码的一小部分(即,
getMailerInstance
sendMail

还要注意我是如何使用泛型名称
getMailerInstance
而不是
getMGInstance
,它将代码绑定到Mailgun的


作为一个补充,考虑在<代码> GETMeMeLebug实例中返回一个承诺。

是关于编码模式或更多关于邮件枪的问题吗?如果API密钥和域是相同的,并且只有地址和消息改变,我希望能看到一个function@MaxArt这是关于编码模式的,这取决于:如果您的mailgun实例不占用太多内存并且需要一些时间进行初始化,我将创建一个实例,并在应用程序的生命周期中重复使用它。如果它又大又快,我会在每次需要时重新创建它,这样一旦它离开它的包含函数,它就会被销毁。@mplungjan API键和域是相同的