文档章节

js中的克隆

励志成为开源扛把子
 励志成为开源扛把子
发布于 2018/01/26 23:42
字数 468
阅读 3
收藏 0
  1. 原数类型:数值、字符串、布尔值、null、nudefined,(后面两种为特殊的原始值)
  2. 对象类型:object对象类型

数组克隆

在JS中,对于对象类型的变量的引用是通过类似C语言的指针的方式来操作的,如果多个变量引用同一个对象,则任意一个对变量的操作都会影响到其它的变量。

因此在创建一个与已经存在的对象内容相同的对象,不能通过简单的复制操作。例如:

var a = [1,2,3,4];
var b = a;
    c = b;
    a.pop();
//移除最后一个元素 alert(b); //弹出1,2,3 alert(c); //弹出1,2,3 

在执行上面的代码发现,在a的内容改变后,变量b和c的结果也改变了。

上面的情况也许不是我们所需要的,我们需要的是创建一个与原对象内容一样的“新”对象。我们需要一些克隆的办法来实现。

JS里Array也是一种Object。一下为克隆方法的总结。

1.最简单的办法,就是创建一个新数组,并遍历数组,逐项添加到新数组中。

Array.prototype.clone = function(){
                            var a=[];
                            for(var i=0,l=this.length;i<l;i++)
                            a.push(this[i]);
                            return a;
                        }
这是最容易想到和理解的。但是有点复杂,以下为两种简单的办法。
2.通过Array对象的slice方法。
slice方法是通过参数start和end的传入值来返回数组中的一段,该方法不对原数组进行操作。我们使用slice(0)来使其返回所有项。
Array.prototype.clone = function(){ return this.slice(0); } 

3.通过Array对象的concat方法。

concat方法是用来实现数组的合并的。通过和一个空函数的合并,即可实现我们的克隆功能。

Array.prototype.clone=function(){ return [].concat(this); } 
//或者 Array.prototype.clone=function(){ return this.concat(); } 

 

© 著作权归作者所有

上一篇: Cent OS7
励志成为开源扛把子
粉丝 0
博文 15
码字总数 2159
作品 0
嘉定
程序员
私信 提问
JS中的prototype的一些理解

JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是...

Doublec
2015/05/14
63
0
js笔记十七之DOM操作-增删改

DOM的赠删改 增 真是项目中, 我们会在js中动态创建一些html标签, 然后把其增加到页面中 document.createElement 在js中动态创建一个html标签 appendChild 容器.appendChild(新元素) 把当前创...

uplyw
2018/05/11
0
0
深克隆-Ramda源码中的实现

知识点总结 写一个深克隆的方法,我们需要掌握的知识点 js的数据类型:原始类型,引用类型。 js对象的理解。Date,ExpRep等内置对象的使用。 使用typeof、Object.prototype.toString进行类型...

猎户座小陈
06/28
0
0
原生JS如何实现包含各种类型数据的深克隆

引言 在各个社区查找使用原生js实现深克隆的方法,众说纷纭,大多数实现效果并不理想,在此将各家之言总结一下,得出一个完美的解决方案。 本文参考以下文章,感兴趣者请移步到原文链接。 JS...

九九陈
03/28
0
0
javaScript自带的深拷贝

先声明,此文并非本人所以,是由github watcher而来。 如果有侵权,请联系删除 下面是文章的内容: 来看看JavaScript中的深拷贝。 通过引用调用(call by reference) 译注:通过引用调用可能有...

我怎么辣么菜鸡啊
08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TVS瞬态抑制二极管的三大特点

  TVS管瞬态抑制二极管有以下三大特点。   1、将 TVS 瞬态抑制二极管加在信号及电源线上,能防止微处理器或单片机因瞬间的脉冲,如静电放电效应、交流电源之浪涌及开关电源的噪音所导致的...

仙溪
14分钟前
2
0
6 个 K8s 日志系统建设中的典型问题,你遇到过几个?

导读:随着 K8s 不断更新迭代,使用 K8s 日志系统建设的开发者,逐渐遇到了各种复杂的问题和挑战。本篇文章中,作者结合自己多年经验,分析 K8s 日志系统建设难点,期待为读者提供有益参考。...

Mr_zebra
14分钟前
2
0
准则2.1-性能、运行Wi-Fi在iPad上一个或多个错误问题

很多开发者上架遇到这个问题,苹果那边打不开APP,加载不出来内容! 很多人以为是没有兼容ipad,其实是苹果审核都用ipad,跟有没有支持兼容没有关系。 如果自己在国内测试加载正常,要看APP...

qtb999
14分钟前
3
0
华为云学院带你7天入门Redis(2)

华为云学院带你7天入门Redis(2) 1、深度剖析memory Info是Redis提供的一个非常有用的查看状态信息的命令。使用 redis-cli 连上 Redis,输入 info all 命令,redis-server 就 会返回 Redis ...

华为云学院
22分钟前
5
0
Android 自定义View中,四个参数的构造函数的含义

MyView(Context context) Used when instanciating Views programmatically. MyView(Context context, AttributeSet attrs) Used by the LayoutInflater to apply xml attributes. If one of......

SuShine
24分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部