js 对象克隆
今天在做ajax请求的时候,遇到了一个问题是:比如我后台返回一个json数据
var datalist = data.list ; //这个是前端接收得ajax json数据
1:先console.dir(datalist);
然后我在 for 循环遍历这个数据 ,
for(var i in datalist){
var shtml = '<div>'+datalist[i].username+'</div>';
}
console.dir(datalist);
我上面看样子是没有改变datalist这个对象,但是打印出的结果是不一样的。。
网上找的解决办法是:
首先克隆出一个对象即可,,,,
方法一:克隆
Object.prototype.Clone = function()
{
var objClone;
if ( this.constructor == Object ) objClone = new this.constructor();
else objClone = new this.constructor(this.valueOf());
for ( var key in this )
{
if ( objClone[key] != this[key] )
{
if ( typeof(this[key]) == 'object' )
{
objClone[key] = this[key].Clone();
}
else
{
objClone[key] = this[key];
}
}
}
objClone.toString = this.toString;
objClone.valueOf = this.valueOf;
return objClone;
}
function clone(myObj){
if(typeof(myObj) != 'object') return myObj;
if(myObj == null) return myObj;
var myNewObj = new Object();
for(var i in myObj)
myNewObj[i] = clone(myObj[i]);
return myNewObj;
}方法二实现:
Object.prototype.Clone = function()
{
var objClone;
if ( this.constructor == Object ) objClone = new this.constructor();
else objClone = new this.constructor(this.valueOf());
for ( var key in this )
{
if ( objClone[key] != this[key] )
{
if ( typeof(this[key]) == 'object' )
{
objClone[key] = this[key].Clone();
}
else
{
objClone[key] = this[key];
}
}
}
objClone.toString = this.toString;
objClone.valueOf = this.valueOf;
return objClone;
}
浙公网安备 33010602011771号