js深さクローン
1302 ワード
jsは一般的に2つの異なるデータタイプの値があります.
基本タイプ(undefined、Null、bollan、String、Numberを含む)は、値によって伝えられます.
参照の種類(配列、オブジェクトを含む)は、アドレスによって伝達され、参照の種類は、値が伝達されるときにメモリ内のアドレスである.例えば
クローンまたはコピーは2種類に分けられます.
浅いクローン:基本タイプは値伝達で、オブジェクトは依然として参照伝達である.
深さクローン:すべての要素や属性が完全にクローンされ、元の参照の種類から完全に独立しています.つまり、オブジェクトの属性が後から変更される場合、元のオブジェクトは変更されません.
基本タイプ(undefined、Null、bollan、String、Numberを含む)は、値によって伝えられます.
参照の種類(配列、オブジェクトを含む)は、アドレスによって伝達され、参照の種類は、値が伝達されるときにメモリ内のアドレスである.例えば
var a={"a":1};
var b=a;
b["b"]=2;
console.log(a);//{"a":1,"b":2};
bの値を変更すると、a変数の値も変化します.クローンまたはコピーは2種類に分けられます.
浅いクローン:基本タイプは値伝達で、オブジェクトは依然として参照伝達である.
深さクローン:すべての要素や属性が完全にクローンされ、元の参照の種類から完全に独立しています.つまり、オブジェクトの属性が後から変更される場合、元のオブジェクトは変更されません.
Object.prototype.clone = function(){
/* */
var cloneObj;
/* new STRING NUMBER NEW */
if(this.constructor == Object){
cloneObj = new this.constructor();
}else{
cloneObj = new this.constructor(this.valueOf());
} /* , */
for(var i in this){
if(cloneObj[i] != this[i]){
if(typeof (this[i]) == "object"){
cloneObj[i] = this[i].clone();
}else{
cloneObj[i] = this[i];
}
}
}
/* , , toString valueof FOR IN CLONEOBJ , */
cloneObj.toString = this.toString;
conleObj.valueOf = this.valueOf;
return cloneObj
}