개발 중에는 객체 간의 참조 관계를 방해하고 사본을 남기고 싶어하는 것은 불가피합니다.
JavaScript에서 간단한 방법은 JSON 함수를 사용하여 객체를 문자열로 연결 한 다음 새 객체에 구문 분석하는 것입니다. 온라인 코드를 검색하면 오픈 소스 커뮤니티에는 여전히 많은 복제 코드가 있습니다.
코드를 찾을 수 있지만 상황은 항상 다른 사람이며 학습 코드는 항상 변하지 않는 주제가됩니다.
나는 두 가지 복제 된 기능을 직접 썼습니다.
Cloneown : 상속 된 특성을 포함하지 않는 사용자 정의 객체의 자체 속성을 복제하십시오. 속성은 기본 데이터 유형 및 배열 일 수 있습니다. 사용자 정의 객체를 사용자 정의 할 수 있습니다. 클론 할 속성 이름 목록을 공식화 할 수 있습니다.
Clonearray : 배열을 복제하고 배열의 요소는 객체, 기본 유형 일 수 있습니다.
코드 사본은 다음과 같습니다.
// 첫 번째 매개 변수는 복제 된 객체이고 두 번째 매개 변수는 복제 해야하는 속성 목록입니다.
함수 cloneown () {
var obj = 인수 [0];
if (typeof obj === 'undefined'|| obj === null)
반품 {};
if (typeof obj! == 'Object')
반환 obj;
// 두 번째 매개 변수는 속성 이름 목록 이므로이 목록을 사용하여 선택하십시오.
// 그렇지 않으면 모든 속성이 복제됩니다
var attrs = 인수 [1];
var enable_spec_attr = true;
if (! (attrs instanceof array)) {
//console.log(attrs);
attrs = obj;
enable_spec_attr = false;
}
var result = {};
var i;
for (I in Attrs) {
attr = enable_spec_attr? attrs [i] : i;
//console.log(attr);
if (obj.hasownproperty (attr)) {
if (obj [attr] 배열 인스턴스) {
결과 [attr] = clonearray (obj [attr]);
}
else if (typeof obj [attr] === 'object') {
결과 [attr] = cloneown (obj [attr]);
} 또 다른 {
결과 [attr] = obj [attr];
}
}
}
반환 결과;
}
코드 사본은 다음과 같습니다.
// 배열을 복제합니다
함수 clonearray (배열) {
if (typeof array === 'undefined'|| array === null)
반품 [];
if (! (배열 인스턴스)))
반품 [];
결과 = [];
var i;
for (i in array) {
if (typeof array [i]! == 'object') {
결과 [i] = 배열 [i];
계속하다;
}
// 복제 객체
결과 [i] = cloneown (배열 [i]);
}
반환 결과;
}
부르다
1. 정기적으로 Custom Object를 복제합니다.
코드 사본은 다음과 같습니다.
var a = {
이름 : 'Frank',
나이 : 20
};
var b = cloneown (a);
2. 복제 된 속성을 지정하십시오
코드 사본은 다음과 같습니다.
var a = {
이름 : 'Frank',
나이 : 20,
주소 : '어디서나'
};
var b = cloneowne (a, [ 'name', 'age']);
3. 배열 속성이 포함 된 사용자 정의 객체를 클론
코드 사본은 다음과 같습니다.
var a = {
이름 : 'kxh',
나이 : 20,
책 : [ 'hai', 'ho', 'ali'],
좋아요 : [
{Wname : 'Kaili', 임금 : 81, fav : "aaaaa"},
{wname : 'seli', 임금 : 82, fav : "bbb"},
{wname : 'ailun', 임금 : 83, fav : "ccc"},]
};
var b = cloneowne (a);
4. 사용자 정의 객체로 배열을 클론
코드 사본은 다음과 같습니다.
var a = [
{
이름 : 'Frank',
나이 : 20
},
{
이름 : '레온',
나이 : 30
}
];
var b = clonearray (a);
데이터 타임 유형과 같은 내장 객체의 복제와 같은 위의 코드에는 여전히 많은 문제가 있습니다.
문제가 관리되며 이러한 학습 과정도 수행해야합니다.