JavaScriptの深度コピーと浅いコピー
1536 ワード
1:jsには参照転送のための値が割り当てられています.対像を変数に割り当てるとき、この変数が指し示すのは元の画像のアドレスです.参照はコピーです.2:深くコピーするということは、コピー対象の基本的なカテゴリではなく、元のオブジェクトの中のオブジェクトをコピーするということです.つまり完全に新しいオブジェクトが作られ、新しいオブジェクトが指すのは元のイメージアドレスではありません.
1:浅いコピー
var code={a:1,b:2}
var p=code
sone.info(p.a)/1
code.a=100
sone.info(p.a)/100
consone.info(code.a)/100
2:ディープコピー
var obj=clone;
code.a=100
consolie.info(obj.a)/1
1:浅いコピー
var code={a:1,b:2}
var p=code
sone.info(p.a)/1
code.a=100
sone.info(p.a)/100
consone.info(code.a)/100
2:ディープコピー
function clone(myObj){
// clone
if(typeof(myObj) != 'object' || myObj == null) return myObj;
var newObj = new Object();
for(var i in myObj){
newObj[i] = clone(myObj[i]);// 。
}
return myNewObj;
}
dojoコピー関数:function(o) {
if (!o) {
return o;
}
if (dojo.isArray(o)) {
var r = [];
for (var i = 0; i < o.length; ++i) {
r.push(dojo.clone(o[i]));
}
return r;
}
if (!dojo.isObject(o)) {
return o;
}
if (o.nodeType && o.cloneNode) {
return o.cloneNode(true);
}
if (o instanceof Date) {
return new Date(o.getTime());
}
r = new(o.constructor);
for (i in o) {
if (! (i in r) || r[i] != o[i]) {
r[i] = dojo.clone(o[i]);
}
}
return r;
}
var code={a:1,b:2}var obj=clone;
code.a=100
consolie.info(obj.a)/1