JavaScript 简单对象继承

标签 javascript

我们正在使用一个以对象作为参数的小部件。我想要一些对象继承之王来自定义小部件。默认设置应该是默认的,然后继承对象(添加和更新属性),这应该给出所需的对象,如下面的代码所示。

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/

相关文章:

javascript - 火力地堡 'requires-recent-login'

javascript - Javascript 中声明的、未初始化的变量会发生什么?它有值(value)吗?

javascript - 更改 Wordpress 网站下拉框中的元素

javascript - D3 工具提示错误 : "Cannot read property ' - 1' of undefined"

javascript - ajax转json

javascript - Bootstrap 输入文件游标

javascript - Ext JS 4的文件上传和内部服务器错误

javascript - 是否可以使用 KeyMap 绑定(bind)到常规 DOM 元素

javascript - Angular.js - ui-router 不注入(inject) View

javascript - Javascript 预加载内容 three.js