我希望我的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
不再存在。
答案 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];
}
}
}
};