在JavaScript中为函数创建配置

时间:2011-05-27 07:12:23

标签: javascript jquery object configuration

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

(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>

我希望config.param仍为“值”,而config.group.groupParam为“newValue”。

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

2 个答案:

答案 0 :(得分:3)

如果您不想重新发明轮子,jQuery有一个名为$.extend()的强大功能,它似乎就是您所需要的。

你可以在jQuery 1.6.1 source中查看它(例如 Ctrl + F 和“extend”=&gt;因为我已经很久了一直在等待使用这些键盘的东西:))。

答案 1 :(得分:1)

它被覆盖了,因为你告诉它用你的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];
            }
        }
    }
};