1. 程式人生 > 程式設計 >淺談克隆 JavaScript

淺談克隆 JavaScript

目錄
  • 1、淺克隆
  • 2、深克隆

1、淺克隆

淺克隆無法copy陣列和物件

var obj = {
    name : "abs",age : '18',sex : 'male'
}
var obj1 = {}
function clone(Origin,target) {
    target = target || {};//防止使用者不輸入target
    for(var k in Origin){
        target[k] = Origin[k];
    }
}
clone(obj,obj1);

2、深克隆

先判斷它是什麼,原始值,陣列還是物件,分別處理

  • 遍歷物件
  • 是原始值直接copy
  • 不是原始值判斷是陣列還是物件
  • 是陣列建空陣列
  • 是物件建空物件
  • 建立了之後再遍歷一遍原始物件或數組裡是啥
  • 遞迴
vahttp://www.cppcns.comr obj = {
    name : 'lin',sex : 'male',card : [1,2,3,4],wife : {
        name : 'bcsds',son :JAbMjzzWiL {
            name : 'aaa'
        },age : '23'
    }
}
var obj1 = {}
//原始值和物件陣列typeof返回值有區別
function deepClone(origin,target) {
    target = target || {};
    for(var k in origin) {
        if(origin.hasOwnProperty(k)){
            if(typeof(origin[k]) == 'object') {
                if(Object.prototype.toString.call(origin[k]) == '[object Array]') {JAbMjzzWiL
target[k] = []; }else { target[k] = {}; } deepClone(origin[k],target[k]); }else { target[k] = origin[k]; } http://www.cppcns.com } } } deepClone(obj,obj1);