Javascript拷贝对象方法

注意:下面两种方法都验证通过。

方法1:(jQuery方法)

var o = {a: [1]};


//浅拷贝:新对象成员直接引用原来对象成员的子对象。
var o1 = $.extend({}, o);
console.log(o1.a === o.a);  // true


//深拷贝:新对象成员重新建立一个新的子对象,并把原来对象成员的子对象值拷贝过来。
var o2 = $.extend(true, {}, o);
console.log(o2.a === o.a);  //false


方法2:(标准Javascript方法)


http://jsfiddle.net/cattail/NYNT5/


var clone = (function(){
  // classify object
  var classof = function(o){
    if (o === null) { return "null"; }
    if (o === undefined) { return "undefined"; }
    // I suppose Object.prototype.toString use obj.constructor.name
    // to generate string
    var className = Object.prototype.toString.call(o).slice(8,-1);
    return className;
  };
  
  var references = null;


  var handlers = {
    // Handle regexp and date even in shallow.
    'RegExp': function(reg) {
      var flags = '';
      flags += reg.global ? 'g' : '';
      flags += reg.multiline ? 'm' : '';
      flags += reg.ignoreCase ? 'i' : '';
      return new RegExp(reg.source, flags);
    },
    'Date': function(date) {
      return new Date(+date);
    },
    'Array': function(arr, shallow) {
      var newArr = [], i;
      for (i=0; i


你可能感兴趣的:(JQuery,javascript)