이전 섹션에서는 JavaScript 객체지향 네임스페이스, javascript 객체지향 JavaScript 클래스 및 JavaScript 객체지향 비공개 멤버 및 공개 멤버에 대해 설명했습니다. 위에서 먼저 읽은 다음 아래를 계속 읽으세요.
이렇게 정의하면
function getDate(){.....}
function getDate(date){.....}
그러면 후자의 메소드가 오류는 보고되지 않지만 이전 것입니다.
하지만 실제로 오버로딩을 구현할 수 있습니다. jQuery를 사용해 본 적이 있다면, 예를 들어 $("#btn").val()은 ID가 있는 버튼을 가져오는 것입니다. "btn" 값, 그리고 $("#btn").val("Click Me")는 ID가 "btn"인 버튼에 값을 할당합니다.
그럼 JavaScript는 어떻게 구현되는 걸까요(정확하게 말하면 "시뮬레이션"이라고 불러야 할까요)?
답은 간단합니다. 인수
arguments는 호출자가 전달한 실제 매개변수를 포함하는 JavaScript의 내장 객체이지만 호출될 때 함수 선언에 의해 정의된 매개변수 목록으로 제한되지 않습니다. , 이는 배열 속성과 동일합니다.
일단은 "배열"로 이해하겠습니다. 배열의 길이와 요소의 유형에 따라 다양한 구현을 선택하여 오버로딩을 시뮬레이션합니다.
자세한 내용은 다음 예를 참조하세요.
function getDate(){
if(arguments.length==0){
var date=new Date().toLocaleDateString()
return "지금 매개변수를 입력하지 않았습니다. time:" 날짜;
}
if(arguments.length==1){
if(arguments[0].constructor ==Date){
return "입력한 매개변수 날짜 유형입니다. 현재 시간은 다음과 같습니다. " 인수[0].toDateString();
}
if(arguments[0].constructor ==String){
return "입력한 매개변수는 다음과 같습니다. String 유형이고 이제 시간은 다음과 같습니다. " 인수[0];
}
}
}
따라서 다음과 같이 호출할 수 있습니다.
getDate()
getDate(new Date( ))
getDate("Monday")
이것은 JavaScript 오버로딩을 달성하지만 이 "구현"이 너무 많은 매개변수가 있으면 압도적이고 if{.} 로 인해 코드가 지저분해집니다. 따라서 JavaScript에서는 이러한 오버로딩을 사용하지 않는 것이 좋습니다.