记录在面试过程中被问到的一些问题,ps:面试真心是一个很好的学习机会,能看到好多自己的不足~~
浅拷贝&&深拷贝
浅拷贝会使的两个对象指向同一个内存地址,深拷贝则会开辟一块新的内存空间,然后将被复制对象的属性逐个复制,复制对象不会对被复制对象产生影响。浅拷贝
1
2
3
4
5
6
7
8
9
10
11
12
13
14function clone(obj){
var F = function() {};
F.prototype = obj;
return new F();
}
function clone(obj){
var newObj={};
for(attr in obj){
newObj[attr]=obj[attr];
}
return newObj;
}深拷贝
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20/*最简单的实现
* 抛弃对象的constructor,RegExp等对象无法复制
*/
var newObj = JSON.parse(JSON.stringify(obj));
/*
*这个函数可以实现数组等的深拷贝,不过还是有一些bug
*/
function extendDeeply(superObj, subObj) {
var subObj = subObj || {};
for(prop in superObj){
if(typeof superObj[prop] == "object") {
superObj[prop] = (superObj[prop].construtor === Arrar) ? [] : {};
extendDeeply(superObj[prop], superObj[prop]);
}else{
subObj[prop] = superObj[prop];
}
}
return subObj;
}实现比较完整的深拷贝,可以参考http://jerryzou.com/posts/dive-into-deep-clone-in-javascript/