为什么我不能运行ForIn来合并构造函数上的配置?
我有一个包含大量开放配置的小类,所以我想简单地运行一个ForIn来缩短代码。
基本上转这个
var FormMessage = (function() {
...
function FormMessage(args) {
this.Conf = {
mobile:args.mobile || Configurations.mobile,
form: {
selector: args.form.selector || Configurations.formSelector
},
...
}
}
...
return FormMessage;
})();
var i = new FormMessage({mobile: true, form:{selector: '.the-first'}}),
e = new FormMessage({mobile: false, form:{selector: '.the-second'}});
进入这个
var FormMessage = (function() {
...
function FormMessage(args) {
for (var attr in args) { this.Conf[attr] = args[attr]; }
}
...
return FormMessage;
})();
var i = new FormMessage({mobile: true, form:{selector: '.the-first'}}),
e = new FormMessage({mobile: false, form:{selector: '.the-second'}});
但是,如果我这样做,那么第二次初始化对象时它会覆盖第一个。
你们知道我怎样才能做到这一点?
感谢您的帮助。
答案 0 :(得分:0)
也许就像下面的代码一样?我也认为IIFE是不必要的。
function FormMessage(conf, args) {
Object.keys(args).forEach(e => conf[e] = args[e]);
return Object.assign({}, conf); // returns a fresh new object
}
// initial config object
var confObj = {mobile: 'wow'};
var i = new FormMessage(confObj, {mobile: true, form:{selector: '.the-first'}}),
e = new FormMessage(confObj, {mobile: false, form:{selector: '.the-second'}});
console.log(i, e);