2016-05-13 81 views
4

我在ES5代码中有一个var,如下所示。从变量创建对象ES6

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

我可以说

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

改变这ES6但我怎么做,如果我不希望传递值的所有属性?例如,我只想传递clientId和keepAlive。 Rest将具有由MQTT模块设置的默认值。那么,如何才能为此对象的某些属性设置值?

+0

您的ES6版本省略了'clean',并且还重命名了'lastWillMessage'。 – 2016-05-13 03:33:45

+0

它将如何知道它应该省略清洁?它不会按照对象内部属性的顺序选择值吗? :( – mayooran

+2

我不认为我理解这个问题...如果MQTT模块将为缺席参数设置缺省值,那么您不能将它们排除在外吗? –

回答

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

1

如果传递mqtt.Client对象与未定义的属性值,它会使用它的默认。

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);如果您不打算永远使用属性,忽略它,不把它作为一个选项。