在JavaScript中为函数创建配置

在JavaScript中为函数创建配置,javascript,jquery,object,configuration,Javascript,Jquery,Object,Configuration,我希望我的JavaScript类可以从外部进行配置。因此,我创建了一个私有的config-属性和一个loadConfig-方法。我的问题是,当我加载配置时,它会完全覆盖config属性,而不仅仅是我定义的属性 (function() { var config = { param: value, group: { groupParam: value } }; function MyClass() { this.loadConfig = functio

我希望我的JavaScript类可以从外部进行配置。因此,我创建了一个私有的
config
-属性和一个
loadConfig
-方法。我的问题是,当我加载配置时,它会完全覆盖config属性,而不仅仅是我定义的属性

(function() {
var config = {
    param: value,
    group: {
        groupParam: value
    }
};
function MyClass() {
    this.loadConfig = function(loadConfig) {
        if (typepof loadConfig == "undefined" || typeof loadConfig == "null")
            return;
        else
            config = loadConfig;
    };  
}
window.MyClass = new MyClass();
})();
当我加载自定义配置时

<script type="text/javascript">
    var config = {
        group: {
            groupParam: "newValue"
        }
    };

    MyClass.loadConfig(config);
</script>

变量配置={
组:{
groupParam:“newValue”
}
};
loadConfig(config);
我希望
config.param
仍然是“value”,而
config.group.groupParam
是“newValue”


当前,对象被覆盖,在
loadConfig()
之后,
config.param
不再存在。

它被覆盖,因为您告诉它在
loadConfig
方法中用这一行覆盖:

config = loadConfig;
为了保留
loadConfig
中没有明确更改的任何值,您必须遍历
loadConfig
中的所有属性并分别分配它们:

this.loadConfig = function (loadConfig) {
    if (typeof loadConfig == "undefined" || typeof loadConfig == "null") {
        return;
    } else {
        var x;
        for (x in loadConfig) {
            if (Object.prototype.hasOwnProperty.call(loadConfig, x)) {
                config[x] = loadConfig[x];
            }
        }
    }
};

如果您不想重新发明轮子,jQuery有一个很棒的函数,名为,这似乎是您所需要的


例如,您可以在中查看它(Ctrl+F和“extend”=>我已经很久没有使用这些键盘了:)。

@ApoY2k它不会,但深循环打开了一堆新的蠕虫。是否会有数组,或者仅仅是对象?@ApoY2k您可以将您的问题标记为
jquery
然后:)。顺便说一句,很乐意帮忙。