function clone(myobj){
if((typeof myobj) != "object" ){
return myobj;
}
if(myobj == null){
return myobj;
}
var newobj = {};
for(key in myobj){
newobj[key] = clone(myobj[key]);
}
return newobj;复制代码
}
Object.prototype.clone = function() {
var newObj = {};
for (var i in this) {
if (typeof(this[i]) == 'object' || typeof(this[i]) == 'function') {
newObj[i] = this[i].clone();
} else {
newObj[i] = this[i];
}
}
return newObj;复制代码
};
Array.prototype.clone = function() {
var newArray = [];
for (var i = 0; i < this.length; i++) {
if (typeof(this[i]) == 'object' || typeof(this[i]) == 'function') {
newArray[i] = this[i].clone();
} else {
newArray[i] = this[i];
}
}
return newArray;复制代码
};
Function.prototype.clone = function() {
var that = this;
var newFunc = function() {
return that.apply(this, arguments);
};
for (var i in this) {
newFunc[i] = this[i];
}
return newFunc;复制代码
};
var obj = {
name: 'byvoid',
likes: 'sdf',
display: function() {
console.log(this.name);
}复制代码
};
var newObj = obj.clone();
console.log(newObj);
obj.likes.push("asd");
console.log(obj)
console.log(newObj)
//newObj.likes.push('python');
//console.log(obj.likes); // 输出 [ ‘node’ ]
//console.log(newObj.likes); // 输出 [ ‘node’, ‘python’ ]
//console.log(newObj.display == obj.display); // 输出 false
如果没定义 Function.prototype.clone = function (){} 会显示
Uncaught RangeError: Maximum call stack size exceeded 报错 :
用递归或者引入冲突的js库一般都是这两种原因导致的
意思为:堆栈溢出
发生原因:
递归次数过多,没有正确的退出递归造成堆栈溢出
解决方法:
1.减少递归次数,使用其他方法解决问题
2.恰当的时机返回,避免由于返回条件不正确导致的堆栈溢出
错误直译过来就是“栈溢出”,出现这个错误的原因是因为我进行了递归运算,但是忘记添加判断条件,导致递归无线循环下去。。