看了一些帖子,但最后都觉得不对,靠点谱的如下function clone(obj){
if(!obj || typeof obj!='object'){
return obj;
}
function Clone(){}
Clone.prototype = obj;
var o = new Clone();
for(var key in obj){
if(typeof obj[key] == 'object'){
o[key]=clone(obj[key]);
}
} return o;
}但段代码有两个问题:
1、原始obj修改,被复制的新obj也会变动,毕竟是prototype引用
2、新的obj的_prototype_指向才是obj的复制,不算100%还原希望有明白的人能给些指点,谢谢!
if(!obj || typeof obj!='object'){
return obj;
}
function Clone(){}
Clone.prototype = obj;
var o = new Clone();
for(var key in obj){
if(typeof obj[key] == 'object'){
o[key]=clone(obj[key]);
}
} return o;
}但段代码有两个问题:
1、原始obj修改,被复制的新obj也会变动,毕竟是prototype引用
2、新的obj的_prototype_指向才是obj的复制,不算100%还原希望有明白的人能给些指点,谢谢!
this.name = "csdn";
this.age = "10";
}
Person.prototype.conctructor = function(){
return Person;
}
Person.prototype.setName = function(name){
this.name = name;
}
Person.prototype.sayName = function(){
alert(this.name)
}
Person.prototype.sayAge = function(){
alert(this.age)
}
var p = new Person();
p.setName("123");
function clone(obj){
var _obj = new obj.constructor;
for (var x in obj){
if(obj.hasOwnProperty(x)) {
_obj[x] = obj[x];
}
return _obj;
}
}
var cloneObj = clone(p);
cloneObj.sayName();
Object.prototype.clone = function(){
var me = {};
for(var k in this){
me[k] = this[k].clone?this[k].clone():this[k] ;
}
return me;
}
差不多这样吧
replace替换变量名,
eval。
不知道如何完整获取source code,如果您指的是toString()的话,则无法复制原型链
1、 _obj[x] = obj[x]; 引用变量仍会引用,没有克隆
2、你的这个clone 普遍性不太好