JAvascriptの深いコピーと浅いコピー?
2167 ワード
一、jQueryの$.extend浅いコピーと深いコピー
$.extend( [deep ], target, object1 [, objectN ] );
欠点:しかしこれは限界があります:関数をコピーすることができなくて、プロトタイプチェーンはなくて、オブジェクトはobjectで、所属するクラスはなくなりました
二、浅いコピー
三、深コピーとは、「深コピー」とは、本当の意味での配列やオブジェクトのコピーを実現することである.その実装は難しくなく、「浅いコピー」を再帰的に呼び出せばよい.
$.extend( [deep ], target, object1 [, objectN ] );
deep
: Boolean
true, ( )。
target
: Object
object1
: Object
, 。
objectN
: Object
。
$.extend :
var obj1 = {name:xx,age:18,sex:man};
var obj2 = {name:cc,age:18};
$.extend(obj1,obj2);
obj1----->{name:cc,age:18} // obj2
$.extend :
var obj1 = {name:xx,age:18,sex:man};
var obj2 = {name:cc,age:18};
$.extend(true,obj1,obj2);
欠点:しかしこれは限界があります:関数をコピーすることができなくて、プロトタイプチェーンはなくて、オブジェクトはobjectで、所属するクラスはなくなりました
二、浅いコピー
, , 。
function extendCopy(p) {
var c = {};
for (var i in p) {
c[i] = p[i];
}
c.uber = p;
return c;
}
三、深コピーとは、「深コピー」とは、本当の意味での配列やオブジェクトのコピーを実現することである.その実装は難しくなく、「浅いコピー」を再帰的に呼び出せばよい.
function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}
:
---> “” “” 。
---> , , , ( ) , , ..... 。 :1, ,2, 。