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

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 中的对象可以通过原型链实现继承。 ```javascript function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(this.name + " makes a sound."); }; function...

    javascript使用smipleChart实现简单图表

    在介绍如何使用JavaScript结合simpleChart库实现简单图表前,首先要了解simpleChart是一个能够快速生成图表的JavaScript库,它支持多种类型的图表,包括线性图、区域图、柱状图和饼图。simpleChart的主要优点是易于...

    JavaScript按钮类\一个按钮完成对文本框内容的copy和复制

    根据给定的信息,本文将详细解析如何通过JavaScript实现一个按钮同时完成对文本框内容的复制功能。这在很多应用场景中非常实用,例如在表单、笔记应用或是代码分享平台等,用户可以方便地复制文本框中的内容。 ### ...

    Javascript 实现复制(Copy)动作方法大全

    ### Javascript 实现复制(Copy)动作方法大全知识点详解 #### 前言 随着互联网的发展,不同的浏览器种类越来越多,包括IE、Firefox、Chrome、Safari等。这使得在不兼容的浏览器之间实现特定功能变得复杂,尤其是像...

    JavaScript 快速入门语法手册

    在本书中,读者不会找到技术术语、冗长的示例、拉长的历史课程或机智的故事,而是会找到一个精确、简洁且易于理解的JavaScript参考资料。本书内容充实,对于任何JavaScript程序员或Web开发者来说都是一本必备的工具...

    JavaScript快速查询手册

    JavaScript,也被称为JS,是一种广泛应用于网页和网络应用的编程语言,主要负责客户端的动态交互。..."JavaScript快速查询手册"应该包含上述各个方面的详细解释和示例,帮助读者快速查找和掌握JavaScript的关键知识点。

    Javascript中最常用的经典技巧

    - **知识点**: 通过插入一个特殊的 `&lt;noscript&gt;` 标签,可以使得页面在禁用 JavaScript 的情况下显示一个无法访问的链接,从而达到阻止用户保存的目的。 - **应用场景**: - 在版权保护较严格的网站中,作为一种...

    js点击复制内容

    在JavaScript(JS)中,实现点击按钮或者链接来复制文本内容到剪贴板的功能,是网页交互中的一个常见需求。这个功能通常用于帮助用户快速复制一些重要的信息,比如URL、代码片段或者账户密码等。在描述中提到的"js...

    js+flash 实现复制效果

    在网页开发中,实现复制效果是一项常见的需求,特别是在技术分享、教程或代码库中,用户可能需要快速复制示例代码到自己的编辑器中。本文将详细介绍如何利用JavaScript和Flash技术来实现这一功能,主要涉及`js+flash...

    JavaScript各种使用例子

    7. **原型链**:JavaScript的继承机制基于原型链,每个对象都有一个proto属性,指向其构造函数的prototype。通过原型链,子对象可以访问父对象的属性和方法。 8. **ES6新特性**:包括箭头函数、模板字符串、解构...

    javascript的Map实现(高性能)

    在本文中,我们将深入探讨一种高性能的JavaScript `Map`实现,它基于JSON,具有出色的稳定性和更高的容量。 首先,我们来看传统的JavaScript `Map`。原生的`Map`提供了如`set`、`get`、`delete`、`has`等方法,便于...

    JohannesBaagøe的AleaPRNG的简单复制粘贴实现_JavaScript.zip

    Johannes Baagøe的实现中,`Alea`函数接受一个种子值,然后创建一个内部状态对象,该对象包含了Xorshift+算法所需的所有信息。`next()`函数则根据当前状态生成新的随机数,同时更新状态,确保序列的连续性。 在`...

    熟结构的Javascript实现

    1. **树节点的表示**:在JavaScript中,一个树节点通常是一个对象,包含数据、子节点数组以及指向父节点的引用。例如: ```javascript function TreeNode(data) { this.data = data; this.children = []; } ``` 2....

    Javascript基础教程(文字版,代码可复制)

    类型转换是JavaScript的一个重要特性,它允许在不同数据类型之间灵活转换。例如,Number()函数可以把字符串转换为数字: ```javascript var ageStr = "25"; var ageNum = Number(ageStr); ``` 函数是可重复使用的...

    基于ZeroClipboard实现的网站内容复制粘贴JS特效源码.zip

    ZeroClipboard创建了一个透明的Flash对象,覆盖在可以被复制的元素上方,当用户点击这个“假”的复制按钮时,实际上是在触发Flash对象中的复制操作。 ZeroClipboard的使用流程大致如下: 1. 引入ZeroClipboard库的...

    javascript Prototype 对象扩展.docx

    在JavaScript中,通常情况下,当我们创建一个新对象时,会为该对象复制一份其构造函数中的方法。这种方法虽然简单直观,但在创建大量对象时会导致内存浪费,特别是在内存资源宝贵的环境中,如浏览器客户端。 **示例...

    Looper一个sketch插件有助于自动复制组和层

    今天我们要讨论的“Looper”就是这样一个插件,它专为Sketch设计,能够自动复制组和层,极大地简化了设计过程中的重复劳动。 Looper插件的核心功能是自动化复制,对于那些需要多次重复设计元素的情况,如创建网格、...

    js+html5实现复制文字按钮

    本文介绍的是如何使用JavaScript结合HTML5技术来创建一个能够复制页面上指定文字的按钮,这个功能在网页中十分常见,尤其是在需要快速分享或复制页面上特定信息到剪贴板时显得尤为重要。在进行操作之前,需要注意...

Global site tag (gtag.js) - Google Analytics