ForIn合并对象配置

时间:2017-04-18 10:25:57

标签: javascript

为什么我不能运行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'}});

但是,如果我这样做,那么第二次初始化对象时它会覆盖第一个。

你们知道我怎样才能做到这一点?

感谢您的帮助。

1 个答案:

答案 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);