`
xianbin
  • 浏览: 212658 次
  • 来自: ...
社区版块
存档分类
最新评论

JavaScript中,快速实现一个对象的复制!

阅读更多
1、第一种方式,通过JSON转换。
function clone (src) {
    return JSON.parse(JSON.stringify(src));
}


注意,需要引入JSON库:
https://github.com/douglascrockford/JSON-js

2、第二种方式,通过编写JavaScript方法:
function clone(src) {
  function mixin(dest, source, copyFunc) {
    var name, s, i, empty = {};
    for(name in source){
      // the (!(name in empty) || empty[name] !== s) condition avoids copying properties in "source"
      // inherited from Object.prototype.   For example, if dest has a custom toString() method,
      // don't overwrite it with the toString() method that source inherited from Object.prototype
      s = source[name];
      if(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){
        dest[name] = copyFunc ? copyFunc(s) : s;
      }
    }
    return dest;
  }

  if(!src || typeof src != "object" || Object.prototype.toString.call(src) === "[object Function]"){
    // null, undefined, any non-object, or function
    return src;  // anything
  }
  if(src.nodeType && "cloneNode" in src){
    // DOM Node
    return src.cloneNode(true); // Node
  }
  if(src instanceof Date){
    // Date
    return new Date(src.getTime());  // Date
  }
  if(src instanceof RegExp){
    // RegExp
    return new RegExp(src);   // RegExp
  }
  var r, i, l;
  if(src instanceof Array){
    // array
    r = [];
    for(i = 0, l = src.length; i < l; ++i){
      if(i in src){
        r.push(clone(src[i]));
      }
    }
    // we don't clone functions for performance reasons
    //    }else if(d.isFunction(src)){
    //      // function
    //      r = function(){ return src.apply(this, arguments); };
  }else{
    // generic objects
    r = src.constructor ? new src.constructor() : {};
  }
  return mixin(r, src, clone);

}
分享到:
评论

相关推荐

    JavaScript基础和实例代码

    JavaScript电子书,包括了JavaScript的大部分知识,可以帮助读者快速入门。内容如下: 第1章 JavaScript语言概述 1.1 JavaScript是什么 1.1.1 JavaScript简史 1.1.2 JavaScript有何特点 1.2 JavaScript能做什么 ...

    程序天下:JavaScript实例自学手册

    6.5 从一个下拉列表往另一个下拉列表添加内容 6.6 改变列表项的上下顺序 6.7 给下拉框数据分组 6.8 获取列表框的选择 6.9 类IE下拉框 6.10 下拉框式邮件发送 6.11 获取多选框的选择项 6.12 手动调整的列表框 6.13 ...

    《程序天下:JavaScript实例自学手册》光盘源码

    6.5 从一个下拉列表往另一个下拉列表添加内容 6.6 改变列表项的上下顺序 6.7 给下拉框数据分组 6.8 获取列表框的选择 6.9 类IE下拉框 6.10 下拉框式邮件发送 6.11 获取多选框的选择项 6.12 手动调整的列表框 6.13 ...

    JavaScript网页特效范例宝典源码

    实例075 只有一个复选框时控制复选框的全选或反选 119 2.5 密码域 120 实例076 让您的密码域更安全 120 实例077 不提交表单自动检测密码域是否相同 121 2.6 表单应用 122 实例078 通过JavaScript控制表单的提交与...

    jsC8:Javascript驱动

    概述要求当今的应用程序具有高响应能力且... 在jsC8中,文档是一个对象,它是JSON可序列化的对象,具有以下属性: 包含_key字段,该字段在特定集合中唯一地标识文档。 包含_id字段(也称为handle ),该字段在结构中

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    3.10.htm 复制、传递和比较一个对象 3.11.htm 对字符串进行比较 第4章(/C04/) 4.1.htm 简单表达式的例子 4.2.htm 两个字符串进行加操作的实例 4.3.htm 减号的取反功能 ...

    最新Java面试宝典pdf版

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...

    Java面试笔试资料大全

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...

    Java面试宝典2010版

    用JAVA实现一个快速排序。 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 三. html&JavaScript&ajax部分 1...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    asp.net知识库

    [ASP.NET 2.0]PageParser.GetCompiledPageInstance中存在一个Bug 如何在DotNet 2的登录组件中检索用户的锁定状态及解锁? ASP.NET 2.0, 想说爱你不容易 SqlDataSource WEB控件:当DeleteCommandType= 遭遇 ASP.NET ...

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    Java面试宝典-经典

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...

    JAVA面试宝典2010

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax...

    java面试题大全(2012版)

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript;&ajax;...

    Java面试宝典2012版

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript;&...

    java面试宝典2012

    用JAVA实现一个快速排序。 86 11、有数组a[n],用java代码将数组元素顺序颠倒 87 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 88 三. html&JavaScript;&ajax;...

    Java面试宝典2012新版

    用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript;&ajax;...

Global site tag (gtag.js) - Google Analytics