从变量ES6创建对象

时间:2016-05-13 03:26:00

标签: javascript node.js ecmascript-6

我有一个ES5代码的var,如下所示。

  var options = {
  clientId : clientId
  keepAlive : keepAlive,
  clean : clean,
  reconnectPeriod : reconnectPeriod,
  will : lastWillMessage
};

我可以通过说

将其更改为ES6
let options = {clientId,keepAlive,reconnectPeriod,lastWillMessage};

但是如果我不想传递所有属性的值,我该怎么做呢?例如,我只想传递clientId和keepAlive。 Rest将具有MQTT模块设置的默认值。那么如何仅为该对象的某些属性设置值?

2 个答案:

答案 0 :(得分:1)

我不确定这会回答你的问题,但是Object.assign可能有所帮助:

<appender name="AzureAppender2" type="log4net.Appender.AzureBlobAppender, log4net.Appender.Azure">
     <param name="ContainerName" value="testcon" />
     <param name="DirectoryName" value="myfolder/logs.txt" />
     <param name="ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=testcon;AccountKey="rftgdfgdfgfdg78=="/>
     <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
</appender>

更多来自MDN:

  

Object.assign()方法用于将所有可枚举的自有属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

@Bruce Martin's comment

答案 1 :(得分:1)

如果传递mqtt.Client属性值为undefined的对象,它将使用其默认值。

function createClient(streamBuilder, clientId, keepAlive, reconnectPeriod, clean, will) {
    let options = {clientId,keepAlive,reconnectPeriod, clean, will};
    mqtt.Client(streamBuilder, options);
}

例如,除了clientId之外,每个选项都使用mqtt的默认值,并且在调用时使用keepAlive,如下所示:createClient(builder, 'a1', 0);如果您不打算使用属性,请省略它,不要将其作为选项传递。