js 對象克隆

今天在作ajax請求的時候,遇到了一個問題是:好比我後臺返回一個json數據php

var datalist = data.list ; //這個是前端接收得ajax json數據html

1:先console.dir(datalist);前端

而後我在 for 循環遍歷這個數據 ,ajax

for(var i in datalist){json

    var shtml = '<div>'+datalist[i].username+'</div>';this

}prototype

console.dir(datalist);htm

我上面看樣子是沒有改變datalist這個對象,可是打印出的結果是不同的。。對象

網上找的解決辦法是:io

首先克隆出一個對象便可,,,,

 方法一:克隆

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;
} 
相關文章
相關標籤/搜索