오랫동안 글을 올리지 못했습니다. 오늘 갑자기 JQuery의 확장 메소드 구현 원리를 분석해봤습니다. 목적은 JQuery에 대한 이해를 높이는 것이며 JavaScript 마스터가 JS를 작성하는 방법도 이해하고 싶습니다. 부족한 점이 있으면 수정해 주세요. 감사해요!
다음은 JQuery.extend 메소드의 소스코드입니다.
제가 이해한 바는 다음과 같습니다. 객체에 참조 객체(예: 배열 또는 객체)가 포함되어 있으면 객체를 복사할 때 이는 단순히 참조 객체 주소의 복사본이 아니라 참조 객체의 내용입니다. 아래 그림과 같이 별도의 개체로 복사되어 저장됩니다.
위 그림을 보면 두 학생 개체가 친구 개체를 공유하는 것을 볼 수 있습니다. 친구 개체에 대한 한 당사자의 작업은 다른 당사자에게도 표시됩니다. 예를 들어, 친구의 성을 "zhangsan"으로 변경하면 다른 개체도 이를 볼 수 있습니다.
위 그림에서 볼 수 있듯이 두 학생 개체 모두 자체적인 친구 개체를 갖고 있으며, 하나의 수정은 다른 개체에게 완전히 투명합니다(영향 없음). 위 내용은 딥 카피에 대한 저의 이해입니다. 잘못된 점이 있으면 웃지 마십시오.
}
};
jQuery.extend(person); // person 객체를 jQuery($) 객체로 확장
경고($.언어); // java, c, sql
$.언어.push('PL/SQL'); // 확장된 객체 수정
경고(사람.언어); // java, c, sql, PL/SQL
사람.언어.팝()
경고($.언어); // 자바, c, sql
위의 예에서 확장 객체($) 또는 소스 객체(사람)에 의한 언어 배열 수정이 상대방에게 영향을 미친다는 것을 알 수 있습니다. 얕은 카피입니다
2. JQuery.extend(대상 객체, 소스 객체)
얕은 복사를 사용하여 원본 개체의 속성과 메서드를 대상 개체에 복사합니다.
[예제] 사람 객체와 학생 객체를 각각 생성한 후, jQuery.extend 메소드를 통해 사람의 속성과 메소드를 학생 객체로 확장합니다.
var 사람 = {
언어: ['java', 'c', 'sql'],
ShowName : 함수(이름){
Alert("이름: " 이름)
}
};
var 학생 = {
ShowNum : 함수(숫자){
Alert("번호: " num);
}
};
jQuery.extend(student, person); // person 객체를 지정된 학생 객체로 확장
학생.showName("관리자")
경고(학생.언어);
3. JQuery.extend(부울, 소스 객체)
이 메소드의 부울 매개변수는 딥 카피 사용 여부를 나타냅니다. true인 경우 딥 카피가 사용됩니다.
[예제] person 객체를 jQuery 객체로 확장
언어: ['java', 'c', 'sql'],
ShowName : 함수(이름){
Alert("이름: " 이름)
}
};
jQuery.extend(true, person); // person 객체를 jQuery 객체로 확장
경고($.언어); // java, c, sql
$.언어.push('PL/SQL'); // 확장된 객체 수정
경고(사람.언어); // java, c, sql
사람.언어.팝();
위의 예에서 $.언어를 수정해도 언어 속성에 직접 영향을 미치지 않음을 알 수 있습니다. 딥카피입니다
4. JQuery.extend(부울, 대상 객체, 소스 객체)
원본 개체를 대상 개체로 확장하기 위해 전체 복사를 사용할지 여부를 결정합니다. 다음과 같습니다:
[예제] 사람 객체와 학생 객체를 각각 생성한 후, jQuery.extend 메소드를 통해 사람의 속성과 메소드를 학생 객체로 확장합니다.
코드 복사
Alert("이름: " 이름)
}
};
var 학생 = {
언어: ["java", "c ", "javascript"],
ShowNum : 함수(숫자){
Alert("번호: " num);
}
};
var target = jQuery.extend(사람, 학생)
경고(대상.언어); // 자바, c, 자바스크립트
target.언어.push("PL/SQL")
경고(학생.언어); // java, c, javascript, PL/SQL
학생.언어.팝()
경고(대상.언어); // 자바, c, 자바스크립트
var target2 = jQuery.extend(true, 사람, 학생)
경고(target2.언어); // 자바, c, 자바스크립트
target2.언어.push("PL/SQL")
경고(학생.언어); // 자바, c, 자바스크립트
학생.언어.팝()
경고(target2.언어); // java, c, javascript, PL/SQL
위 내용은 확장 방법에 대한 제가 이해한 내용입니다. 잘못된 부분이 있으면 정정해 주시기 바랍니다. 매우 감사합니다!