JavaScript 仅覆盖属于对象的默认选项列表中的指定选项



我想创建一个具有默认选项的对象,除非用户指定了某些选项。用户可以按任意顺序将任何可选值定义为数组,而用户尚未定义的值将改为采用defaultOptions数组中定义的值。

在这种情况下,用户只想覆盖 Chart 对象的宽度和高度,而所有其他defaultOptions将保持类中的定义。

从我的例子来看,它似乎没有将宽度和高度更改为用户指定的值,而是使用defaultOptions值。


class Chart {

constructor(div, data, options = {}) {
let defaultOptions = {
mode: "bar-chart",
width: div.clientWidth,
height: div.clientHeight,
margin: {
top: 10,
right: 10,
bottom: 10,
left: 10
},
name: "Default Chart"
}
this.options = Object.assign({}, defaultOptions, options);
}

}

/* 创建图表对象//应使用这些新值覆盖默认选项数组宽度和高度 */let chart = new Chart(div,{ 宽度: 400, 高度: 400, });

/* 或者,可以创建一个仅更改模式值的图表对象 */let chart = new Chart(div,{ 模式:"饼图" });

答案应该使用原版Javascript,拜托!

一个问题,也是需要注意的一件事:

  1. 您的参数未对齐。您正在以data发送options。有关构造时添加的data参数,请参见下文。
  2. 如果希望调用方能够应用单个边距属性,请注意嵌套对象。请参阅下面的一个示例,了解如何仅允许覆盖一个边距属性并将其他属性保留为默认值。

class Chart {
constructor(div, data, options = {}) {
let defaultOptions = {
mode: "bar-chart",
width: div.clientWidth,
height: div.clientHeight,
margin: {
top: 10,
right: 10,
bottom: 10,
left: 10
},
name: "Default Chart"
}
this.options = Object.assign(
{},
defaultOptions,
options,
{margin: Object.assign(
defaultOptions.margin,
options.margin || {}
)}
);
}
}
/* create Chart object /
/ should override defaultOptions array width and height with these new values */
let chart1 = new Chart(div1, {}, {
width: 400,
height: 400,
});
/* alternatively, could create a Chart object with only mode value change */
let chart2 = new Chart(div2, {}, {
mode: "pie-chart",
margin: {bottom: 7},
});
console.log(chart1, chart2);
<div id="div1" style="width: 317px; height: 321px; background-color: blue;">
<div id="div2" style="width: 172px; height: 251px; background-color: green;">

最新更新