2016-05-13 101 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);如果您不打算永遠使用屬性,忽略它,不把它作爲一個選項。