Javascript 合并对象的自制函数中的问题

Javascript 合并对象的自制函数中的问题,javascript,Javascript,我正在尝试创建一个合并数组的函数。原因是,我有一个函数,它应该获取实体的设置,并将它们与全局默认值合并 //So for example, let's say globalOptions is something like this var globalOptions={opt1:'foo',opt2:'something'}; //and this is entityOptions var entityOptions={opt1:'foofoo',opt2:null}; 唯一的区别是它在对象

我正在尝试创建一个合并数组的函数。原因是,我有一个函数,它应该获取实体的设置,并将它们与全局默认值合并

//So for example, let's say globalOptions is something like this
var globalOptions={opt1:'foo',opt2:'something'};
//and this is entityOptions
var entityOptions={opt1:'foofoo',opt2:null};
唯一的区别是它在对象中有对象,在对象中有对象,所以我做的是一个循环所有对象的函数,我想我以后可以很容易地循环所有对象。请忽略数组的事情。这是背叛,但不必要

function loopObj(obj, call, where, objcall, array) {
    if ($.isArray(obj) || $.isPlainObject(obj)) {
        for (i in obj) {
            if ($.isArray(obj)) {
                if (array) {
                    loopObj(obj[i], call, where[where.length] = i, true);
                    if (objcall) {
                        call(obj[i],where,true);
                        }
                    }
                    else {
                    loopObj(obj[i], call, where+'['+i+']', false);
                    if (objcall) {
                        call(obj[i],where,true);
                        }
                    }
                }
            else {
                if (array) {
                    loopObj(obj[i], call, where[where.length] = parseInt(i), true);
                    if (objcall) {
                        call(obj[i],where,true);
                        }
                    }
                    else {
                    loopObj(obj[i], call, where+'[\''+i+'\']', false);
                    if (objcall) {
                        call(obj[i],where,true);
                        }
                    }
                }
            }
        }
        else {
            return call(obj,where);
            }
    } 
然后我做了这个程序来转换它:

function mergeObj(a,b) {
    temp.retd = new Object();
    loopObj(a,function (c,d) {
        if (c) {
            eval(d.replace('%par%','temp.retd'))=c;
            }
        else {
            eval(d.replace('%par%','temp.retd'))=eval(d.replace('%par%','b'));
            }
        },'%par%', true);
    return temp.retd();
    }
我得到一个错误:

Uncaught ReferenceError: Invalid left-hand side in assignment
(anonymous function)base.js:51
loopObjbase.js:40
loopObjbase.js:31
mergeObjbase.js:46
(anonymous function)base.js:72

我知道这意味着什么,eval返回一个anonomys变量(变量的副本),因此我无法设置它,只能获取它。

显然,在进一步研究之后,我发现jQuery有一个名为
$.extend()
的函数,它正是我想要的


两天内无法接受我自己的答案。

如果我理解您的问题,您可以将对象与合并

或与


+1感谢你有勇气/厚颜无耻/鲁莽地分享这段代码。除非没有其他选择,否则千万不要使用
eval
jQuery.extend(object, { foo: 'bar' });
_.extend({foo:'foo'},{bar:'bar'});