1、数组的复制:
来看如下代码:1
2
3
4
5var level = [1,2,3,4,5,6];
var level1 = level;
level.push(7);
alert(level1); //[1,2,3,4,5,6,7]
alert(level === level1);//true
上面的代码表示 level 数组 和 level1 数组是相同的,修改其中任何一个都会影响到另外一个,这在我们日常项目中可能造成困扰,可以使用如下几个方法clone数组,看代码:
1、创建一个新数组,并遍历数组逐项添加到新数组中。
1 | Array.prototype.clone1 = function(){ |
实验一下:
1 | var level = [1,2,3,4,5,6]; |
2、使用数组的concat方法连接一个空数组。
1 | Array.prototype.clone2 = function(){ |
实验一下:
1 | var level = [1,2,3,4,5,6]; |
3、使用数组的slice方法,返回数组从位置0开始到数组结束的所有元素。
1 | Array.prototype.clone3 = function(){ |
实验一下:
1 | var level = [1,2,3,4,5,6]; |
以上三种方法根据自己喜好随便选一个就可以了。
2、对象的复制:
来看如下代码:
1 | var student = { |
上面的代码表示 student 和 jack 对象是相同的,修改其中任何一个都会影响到另外一个,这在我们日常项目中可能造成困扰,可以使用如下2个方法来clone对象
1、遍历源对象,放入新对象类似数组的第一个方法。
1 | Object.prototype.clone1 = function(){ |
实验一下:
1 | var student = { |
2、利用function的prototype原型链和new实例化来复制对象
1 | Object.prototype.clone2 = function(){ |
实验一下:var student = {
level:'1',
class:'9'
} ;
var jack = student.clone2();
jack.name = 'jack';
jack.level= '9';
alert(student.name); //undefined
alert(student.level); //'1'
alert(jack === student); //false
;