从variablesES6创build对象

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

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

我可以改变这个ES6说

 let options = {clientId,keepAlive,reconnectPeriod,lastWillMessage}; 

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

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

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

例如,将为每个选项使用mqtt的默认值,但clientId和keepAlive在调用时如下所示: createClient(builder, 'a1', 0); 如果您不打算使用财产,请忽略它,并且不要将其作为选项传递给您。

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

 var options = getOptionsFromMQTT(); Object.assign(options, {options, {clientID, keepAlive}); // options now uses whatever values are assigned to clientID and keepAlive 

来自MDN的更多信息:

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

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign