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有非常大的区别,无法通过类来创建对象.那么,既然是面象对象的,如何来创建对象呢? 一.通过”字面量“方式创建. 方法:将成 ...
随机推荐
- 二.django项目环境搭建
Ⅰ.web框架介绍 1.socket 服务端 1)客户端(手机中各种app.浏览器)是用来与服务端(网站的服务器程序)进行交互的 2)服务端类似发电厂,客户端类似电器,socket类似插座,互联网的数 ...
- 剑指Offer_编程题_22
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery )
一. 前言 在前面的两个章节中,我们分别详细介绍了EF的增删改的两种方式(方法和状态)和EF查询的两种方式( Lambda和Linq ),进行到这里,可以说对于EF,已经入门了,本来应该继续往下进行E ...
- v-charts 和 websocket实现数据展示动态推送
v-charts https://v-charts.js.org/#/ ELEMENT力作: 在使用 echarts 生成图表时,经常需要做繁琐的数据类型转化.修改复杂的配置项,v-charts 的出 ...
- Git——如何将本地项目提交至远程仓库(第一次)
1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库. git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数 ...
- 有序不可变列表tuple
tuple(元组)也是一种有序列表 但是与list不同的是,他是不可变的.一旦初始化就不可以被更改 声明方法 tuple名=(元素1,元素2,元素3--) >>> name=('To ...
- AC自动机算法详解 (转载)
首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章, ...
- 【webpack】中mini-css-extract-plugin使用方法
这个参加可以压缩CSS,然后让CSS输出到指定的目录中 使用这个loader也很简单,只有将style-loader 替换成 MiniCssExtractPlugin.loader, 'css-loa ...
- 定义Sales_data类型
Sales_data初步定义如下: struct Sales_data { string bookNo; unsigned units_sold = ; double revenue = 0.0; } ...
- HTTP报错401和403详解及解决办法
一.401: 1. HTTP 401 错误 - 未授权: (Unauthorized) 您的Web服务器认为,客户端发送的 HTTP 数据流是正确的,但进入网址 (URL) 资源 , 需要用户身份验证 ...