正在为你努力加载中........

点滴记录 分享
1
2013-7
首页 >> javascript >> js 对象克隆

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;
} 


作者:一根烟的寂寞 分类:javascript
浏览:95784 评论:0

发表评论: