mootools中有$merge方法能实现以下效果:    var obj1 = {a: 0, b: 1};
    var obj2 = {c: 2, d: 3};
    var obj3 = {a: 4, d: 5};
    var merged = $merge(obj1, obj2, obj3); //returns {a: 4, b: 1, c: 2, d: 5}, (obj1, obj2, and obj3 are unaltered)
 
    var nestedObj1 = {a: {b: 1, c: 1}};
    var nestedObj2 = {a: {b: 2}};
    var nested = $merge(nestedObj1, nestedObj2); //returns: {a: {b: 2, c: 1}}
简单来说就是把几个对象的属性合并起来,难点就在于对象里面的属性是不确定的,可能无限嵌套。

解决方案 »

  1.   

    使用jQuery,var obj = $.extend(true, obj1, obj2, obj3,......);
      

  2.   

    不用框架,但可以把框架中的代码拷出来用
    function $merge() 
    {
      var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
      if ( typeof target === "boolean" ) 
      {
        deep = target;
        target = arguments[1] || {};
        i = 2;
      }
      if ( typeof target !== "object" && target.toString() != "[object Function]" ) target = {};
      if ( length == i ) 
      {
        target = this;
        --i;
      }
      for ( ; i < length; i++ )
      {
        if ( (options = arguments[ i ]) != null )
        {
          for ( var name in options ) 
          {
            var src = target[ name ], copy = options[ name ];
            if ( target === copy ) continue;
            if ( deep && copy && typeof copy === "object" && !copy.nodeType )
              target[ name ] = $merge( deep, src || ( copy.length != null ? [ ] : { } ), copy );
            else if ( copy !== undefined )
              target[ name ] = copy;
          }
        }
      }
      return target;
    };  var obj = $merge(true, obj1, obj2, obj3, ......);
      

  3.   

    没用过mootools,jquery也正在看,function merge(){
     var target = [];if(!arguments[0]){
      return null;
    }
    for(var i = 0;i < arguments.length;i++){
      for(var p in arguments[i]){
    target[p] = arguments[i][p];
    }
    }var tmp = [];for(var p in target){
      tmp.push(p + ':' + target[p]);
    }arguments[0] = eavl('{' + tmp.join(',') + '}');return arguments[0];
    }
      

  4.   

    arguments[0] = eavl('{' + tmp.join(',') + '}');return arguments[0];改成:eval('var t =' + '{' + tmp.join(',') + '}');
    return t;