我正在阅读latest one of You Don't Know JS series并且在进入解构部分时完全迷失了。请帮我理解这里的片段。这里的上下文将使一些指定的配置生效,而其他默认值仍然可用。
默认值:
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 我的检查和作业决定。这是我的一招 destructuring config(参见代码片段末尾的= config),但是 我将所有的结构化值重新分配回配置, 使用config.options.enable赋值引用。
最混乱的一个是最后一句: with config.options.enable赋值引用。 config.options.enable与config.options的其他属性有什么区别?
您能否对我的代码和说明做一些解释?谢谢!
答案 0 :(得分:7)
这是我的错字。我刚刚提交了一个问题,以便在第二版中解决它。我应该说config.enable.XYZ
明确表示我指的是所有这些,而不仅仅是那个。对不起,我的错误让你感到困惑。
答案 1 :(得分:2)
此代码使用解构作为深度合并对象的机制。这很奇怪,不要这样做。
直接回答您的问题:
config.options.enable与config.options的其他属性有什么区别?
没有区别。作者正在使用$filename = "files/armaupdates";
$text = $_POST['update'];
$updatesep = "<hr><br><hr><br>";
$updatedContents = $text . $updatesep . file_get_contents($filename);
$fp = fopen($filename, "a+");
if($fp){
fwrite($fp, $updatedContents);
fclose($fp);
echo "Updates has been written!";
}
else {
echo "Error!";
}
来引用所有看起来像config.options.enable
的行。