今天朋友靠了我一道有关JavaScript的题目,想了半天没做出来,后来向朋友请教之后略有小懂。想了一下可能会作为面试题,所以现在把它分享给大家,大家若感兴趣就进来看看吧。题目是:期望的效果是b能获取到所有a的属性和值,当改变b元素的值的时候,不会影响到a。代码如下:
JavaScript代码
var a = {
x: {
y: {
z: 123
}
}
}
var b;
A是一个对象。想要继承a中的属性和属性值有很多方法。首先可以用下面这种方法
JavaScript代码
b = a;
但是这种方法,并不能满足最后一个条件,如果b改变了,那么a依旧可以改变。所以上面这种方法被毫不犹豫的pass了。可以建一个变量,来作为中间量继承就没问题了。方法如下
JavaScript代码
function changeFn (arr1) {
var ccc = {};
for(var i in arr1){
ccc[i]=changeFn(arr1[i]);
}
return ccc;
}
这种方法就能毫不犹豫的满足了上述题目中的所有要求。我们也可以在object上面写一个方法,如下
JavaScript代码
Object.prototype.cloneAll=function(){
function clonePrototype(){}
clonePrototype.prototype = this;
var obj = new clonePrototype();
for(var ele in obj){
//如果检测到原对象中存在另一个对象的引用,那么递归,实现复制引用对象
if(typeof(obj[ele])=="object"){
obj[ele] = obj[ele].cloneAll();
}
}
return obj;
}
b = a.cloneAll();
这道题就为大家说到这里。这是在一个朋友那里得到的题目和答案,在这里分享给大家。希望能对大家学习JavaScript或者面试中有所帮助。