JavaScript简单对象继承
我们正在使用一个以对象为参数的小部件。我想要一些对象继承之王来定制小部件。默认设置应该是默认值,然后继承对象(添加和更新属性),该对象应该提供所需的对象,如下面的代码所示JavaScript简单对象继承,javascript,Javascript,我们正在使用一个以对象为参数的小部件。我想要一些对象继承之王来定制小部件。默认设置应该是默认值,然后继承对象(添加和更新属性),该对象应该提供所需的对象,如下面的代码所示 defaultSettings = { setting1 = "setting1 value"; setting2 = "setting2 value"; } customSettings = { setting2 = "setting2 value - custom"; //Ov
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";
}
在问这个问题之前,我已经在谷歌上搜索过了,但不确定这是实现这一目标最有效的技术吗 如果您使用的是Node.js,那么可以使用
util.inherits(构造函数、超级构造函数)
。
如果您不是,以下是一些依赖于库的文档:
- 原型:
- jQuery:
实现可能会有所不同(例如,深度复制),因此我建议您在将其标记为准备生产之前对其进行彻底测试。继承通常不是您所描述的方法。相反,您通常使用具有默认值的对象:
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...
}
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
接受任意数量的对象(每个对象优先于前一个对象)如下所示:
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...
}
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;
}
但是,如果您对JavaScript中的继承感兴趣,我创建了一个新的方法来简化它,并定期打开(包括继承)。您可以设置默认值在类中,如果传递值, 该类采用这些值
var foo = function (settings){
this.Settings = settings || {};
this.Settings.a = this.Settings.a || 'Default';
this.Settings.b = this.Settings.b || 'Default'
console.log(this.Settings)
}
//default
var test = new foo(); //Object {a: "default", b: "default"}
//custom
var settings = {
a:'a',
b:'b'
};
var x = new foo(settings); // Object {a: "a", b: "b"}
//add new settings
x.Settings.c = 'test';
console.log(x.Settings); // Object {a: "a", b: "b", c: "test"}
给你:这个的副本?使用或仅查看为什么
setting1
获得setting2
的值的来源?请注意,这仅在您首先(手动)将设置哈希转换为面向对象的代码后才有效。