博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈Javascript 中几种克隆(clone)方式
阅读量:5075 次
发布时间:2019-06-12

本文共 1471 字,大约阅读时间需要 4 分钟。

clone就是把原来的东西原样复制一份,新复制的东西和以前的东西没有任何关系

一:在Javascript里,如果克隆对象是基本类型,我们直接赋值就可以了:

var sStr = "kingwell";  var cStr = sStr;   alert(cStr);//输出kingwell  sStr = "abc";  alert(cStr);//输出kingwell;

把一个值赋给另一个变量时,当那个变量的值改变的时候,另一个值不会受到影响。

这里需要注意的是,复制会把A对象的值复制一份给B,由于是基本类型,这个值不再指向其他地方,所以当A的值发生改变时,B的值不会改变,但是如果赋值的是对象的话,情况就不同了,虽然也是把A的值复制给B,但是这个值指向堆内存,堆内存里存储的才是真正的内容,所以当A对象来改变这个内容的时候,B指向的内容也就发生了变化

二:如果不是基本类型,那就有所有不同了:

var aArr = [0,1,2,3];  var m = aArrr;  alert(m);//输出1,2,3  aArr=[1,1,2,3];  alert(m);//输出1,1,2,3;这个值改变了,因为m只是aArr的一个引用,如果aArr的值改变了,那么m也会相应的改变。

如果我们想克隆一个数组,最简单的办法:

var aArr = [0,1,2,3];  var m = aArr.slice(0);  aArr = [3,2,1,0];  alert(m);//输出0,1,2,3,这时虽然aArr中的值已经改变,但是因为使用slice方法已经创建一个新的数组。

我们可以创建一个函数来克隆所有对象:

function clone(obj) {      var o;      if (typeof obj == "object") {          if (obj === null) {              o = null;          } else {              if (obj instanceof Array) {                  o = [];                  for (var i = 0, len = obj.length; i < len; i++) {                      o.push(clone(obj[i]));                  }              } else {                  o = {};                  for (var j in obj) {                      o[j] = clone(obj[j]);                  }              }          }      } else {          o = obj;      }      return o;  }

三:节点克隆:

var p = document.getElementsByTagName("p")[0];  var cP = p.cloneNode();//克隆p节点  var cP = p.cloneNode(true);//克隆p节点,深度克隆,克隆节点以及节点下面的子内容。

转载于:https://www.cnblogs.com/diantao/p/4731031.html

你可能感兴趣的文章
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
docker固定IP地址重启不变
查看>>
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
JAVA面试常见问题之Redis篇
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>