我正在閱讀latest one of You Don't Know JS series,並在解構部分完全丟失。請幫我理解這裏的片段。這裏的上下文即將使某些指定配置生效,而其他缺省值仍然可用。無法理解這個關於ES6解構的片段
默認值:
var defaults = {
options: {
remove: true,
enable: false,
instance: {}
},
log: {
warn: true,
error: true
}
};
的配置:
var config = {
options: {
remove: false,
instance: null
}
};
如何筆者完成
config.options = config.options || {};
config.log = config.log || {};
({
options: {
remove: config.options.remove = defaults.options.remove,
enable: config.options.enable = defaults.options.enable,
instance: config.options.instance =
defaults.options.instance
} = {},
log: {
warn: config.log.warn = defaults.log.warn,
error: config.log.error = defaults.log.error
} = {}
} = config);
和作者做了這樣的描述有關片段:
上一個片段的方法是有效的,因爲我正在破解 解構和默認機制來爲我執行屬性=== undefined 檢查和分配決定。這是一個技巧,我 解構配置(請參閱代碼段末尾的= config),但 我重新將所有解構後的值重新分配給配置, 與config.options.enable賦值引用。
最困惑的一個是最後一句:與config.options.enable賦值引用。 config.options.enable和config.options的其他屬性有什麼區別?
請問您能否對我的代碼和描述做一些解釋?謝謝!
呃!這就是我稱之爲_cute JavaScript_的地方,作者在犧牲可讀性的前提下做了一些「聰明」的事情,使得未來的讀者很難推斷代碼。 – Mathletics
如果作者在解構之前進行了深度合併,這將會更短,更容易理解。 – Mathletics