JavaScript的几种克隆(clone)方式【转】
一:在Javascript里,如果克隆对象是基本类型,我们直接赋值就可以了:
var sStr = "kingwell";
var cStr = sStr;
alert(cStr);//输出kingwell
sStr = "abc";
alert(cStr);//输出kingwell;
把一个值赋给另一个变量时,当那个变量的值改变的时候,另一个值不会受到影响。
二:如果不是基本类型,那就有所有不同了:
1 var aArr = [0,1,2,3];
2 var m = aArrr;
3 alert(m);//输出1,2,3
4 aArr=[3,2,1,0];
5 alert(m);//输出3,2,1,0;这个值改变了,因为m只是aArr的一个引用,如果aArr的值改变了,那么m也会相应的改变。
如果我们想克隆一个数组,最简单的办法:
1 var aArr = [0,1,2,3];
2 var m = aArr.slice(0);
3 aArr = [3,2,1,0];
4 alert(m);//输出0,1,2,3,这时虽然aArr中的值已经改变,但是因为使用slice方法已经创建一个新的数组。
可以创建一个函数来克隆所有对象:
1 function clone(obj) {
2 var o;
3 if (typeof obj == "object") {
4 if (obj === null) {
5 o = null;
6 } else {
7 if (obj instanceof Array) {
8 o = [];
9 for (var i = 0, len = obj.length; i < len; i++) {
10 o.push(clone(obj[i]));
11 }
12 } else {
13 o = {};
14 for (var j in obj) {
15 o[j] = clone(obj[j]);
16 }
17 }
18 }
19 } else {
20 o = obj;
21 }
22 return o;
23 }
三:节点克隆:
1 var p = document.getElementsByTagName("p")[0];
2 var cP = p.cloneNode();//克隆p节点
3 var cP = p.cloneNode(true);//克隆p节点,深度克隆,克隆节点以及节点下面的子内容。
JavaScript的几种克隆(clone)方式【转】的更多相关文章
- 浅谈Javascript 中几种克隆(clone)方式
clone就是把原来的东西原样复制一份,新复制的东西和以前的东西没有任何关系 一:在Javascript里,如果克隆对象是基本类型,我们直接赋值就可以了: var sStr = "kingw ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- Javascript的一种代码结构方式——插件式
上几周一直在做公司的webos的前端代码的重构,之中对javascript的代码进行了重构(之前的代码耦合严重.拓展.修改起来比较困难),这里总结一下当中使用的一种代码结构——插件式(听起来怎么像独孤 ...
- 谈谈JavaScript的2种主要继承方式
今天给自己巩固一下js的继承知识,基础不好,有不对的地方,请尽量拍砖,越重越好. js继承方法最主要的是2种,一种是通过原型的方式,一种是通过借用call&apply的构造函数方式. 1.原型 ...
- JavaScript的几种循环使用方式及性能解析
循环的类型 一:for var arr = [1, 2, 3, 4, 5, 6]; for (var i = 0, len = arr.length; i < len; i++) { conso ...
- JavaScript中三种字符串连接方式及其性能比较
参考地址: https://www.cnblogs.com/programs/p/5554742.html 工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方 ...
- 数组复制的五种方式(遍历循环一一赋值、System.arraycopy、地址赋值、克隆clone()、Arrays.copyof())
package com.Summer_0424.cn; import java.util.Arrays; import java.util.concurrent.CopyOnWriteArrayLis ...
- VS Code - Debugger for Chrome调试JavaScript的两种方式
VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于出差的缘故,博客写的不是很多,一直想写一篇VS Code - Debugger for Chrom ...
- javascript三种创建对象的方式
javascript是一种“基于prototype的面向对象语言“,与java有非常大的区别,无法通过类来创建对象.那么,既然是面象对象的,如何来创建对象呢? 一.通过”字面量“方式创建. 方法:将成 ...
随机推荐
- css实现文本两端对齐
display:inline-block; text-align:center; text-align-last:justify;
- 使用vlc打开usb摄像头
打开vlc播放器 可以打开网络串流的方式打开摄像头,但只支持第一个摄像头 这一串地址拼凑方法看下面,下面可以选择摄像头 为什么只支持第一个摄像头可以参考下一篇使用Vlc.DotNet打开摄像头并截图 ...
- 分布式监控系统开发【day38】:报警策略设计(二)
一.策略和动作多对多的好处坏处 1.好处: 相同服务,相同策略的服务可以不用重复写好多次触发器 2.坏处: 1.策略A给小李和小罗发邮件2.策略B给小胡和小崔发邮件3.策略A是第三部发邮件4.策略B是 ...
- EF CodeFirst系列(4)--- 数据注释属性
EFCodeFirst模式使用的是约定大于配置的编程模式,这种模式利用默认约定根据我们的领域模型建立概念模型.然后我们也可以通过配置领域类来覆盖默认约定. 覆盖默认约定主要用两种手段: 1.数据注释属 ...
- Vim使用技巧:vimtutor
一 写在开头1.1 本文内容本文内容为vim快速入门——vimtutor. 二 第一讲2.1 移动光标(命令模式下)上 - k下 - j左 - h右 - l 2.2 进入和退出vim进入vim - v ...
- jpa @onetomany 级联查询时会有重复数据,去重问题
自己是直接查出来然后利用set去重(自己感觉不是太好,不过能达到目的) List<CampaignDashboardDimensionDo> list = query.getResultL ...
- 创建一个MongoDB数据库再到配置成Window服务再设置用户名密码
1.安装MongoDB数据在官网下载安装 然后在C盘找到C:\Program Files\MongoDB\Server\4.0\bin这个可执行目录 使用cmd进入到这: 2.在C盘根目录创建一个名为 ...
- PHP 【四】
数组 $string = array(x,y,z); <?php$cars=array("Volvo","BMW","Toyota") ...
- innobackupex的流备份【转】
并行备份 innobackupex -p123123 --parallel= /backup 节流备份(节省IO) innobackupex -p123123 --throttle= /backup ...
- 在右键菜单中加入BitLocker重新上锁功能
当使用BitLocker给磁盘上锁后,可以通过命令:manage-bde -lock d: -forcedismount 将已经解锁的磁盘重新上锁,如果觉得每次都通过命令行写命令很麻烦,那可以通过修改 ...