我们正在使用一个以对象作为参数的小部件。我想要一些对象继承之王来自定义小部件。默认设置应该是默认的,然后继承对象(添加和更新属性),这应该给出所需的对象,如下面的代码所示。
defaultSettings = {
setting1 = "setting1 value";
setting2 = "setting2 value";
}
customSettings = {
setting2 = "setting2 value - custom"; //Overwrite defaultSettings 2
setting3 = "setting3 value"; //New Setting
}
finalObject = {
setting1 = "setting2 value - custom";
setting2 = "setting2 value";
setting3 = "setting2 value";
}
在问这个问题之前我已经用谷歌搜索过,但不确定这是实现这一目标的最有效技术吗?
最佳答案
继承通常不是执行您所描述的操作的方式。相反,您通常做的是拥有一个具有默认值的对象:
var defaults = {
setting1: "default1",
setting2: "default2",
setting3: "default3"
};
...然后让函数接受一个可能具有任何这些属性(或不具有这些属性)的对象,然后构建一个组合结果,如下所示:
function apiCall(o) {
var options = {};
var key;
for (key in defaults) {
options[key] = defaults[key];
}
for (key in o) {
options[key] = o[key];
}
// ...then use `options` here...
}
这是一种常见的模式,许多库都有对应的函数,例如 jQuery's extend
, Prototype's extend
等
接受任意数量的对象(每个对象都优先于前一个对象)的通用extend
如下所示:
function extend() {
var rv = {},
key,
source,
index;
for (index = 0; index < arguments.length; ++index) {
source = arguments[index];
for (key in source) {
rv[key] = source[key];
}
}
return rv;
}
如果您有这样的 extend
,那么 API 调用函数将如下所示:
function apiCall(options) {
options = extend(defaults, options);
// ...
}
但是,如果您对 JavaScript 中的继承感兴趣,我创建了一个 helper library called Lineage
为了让它更容易,我 write about JavaScript (包括继承)anemic little my blog定期。
关于JavaScript 简单对象继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16735473/