자바스크립트에는 다른 프로그래밍 언어처럼 함수 시그니처가 없습니다. (함수 시그니처란 무엇인가요? 간단히 말하면 함수에서 허용하는 매개변수 유형과 매개변수 개수를 말합니다. 반환 유형도 포함해야 한다고 생각하는 분들도 계십니다. . 구체적인 개념은 온라인으로 확인하실 수 있습니다.
따라서 Javascript는 다른 언어처럼 동일한 메소드 이름과 다른 수의 매개변수를 사용하여 오버로드를 구현할 수 없습니다. 제 말을 믿지 못하신다면 다음을 시도해 보세요.
function show(){
Alert ("1 ");
}
함수 표시(num1){
경고(num1);
}
window.onload=function(){
표시( );
표시(2);
}
중단점 디버깅 시 매개변수가 없는 show 메소드는 실행되지 않으며 show(num1) 메소드로 덮어쓰게 됩니다.
그러면 자바스크립트에서는 "오버로딩"을 구현할 수 없다는 건가요? 대답은 '예'입니다. 그것은 단지 다른 방법일 뿐입니다. 예, 인수를 사용하세요.
그럼 인수란 무엇인가요? 이는 JS의 특수 속성으로, 배열처럼 첨자 인덱스를 통해 매개변수 값을 가져올 수 있고(배열은 아님) 길이를 통해 매개변수 개수를 가져올 수 있습니다.
function showParamsCount(){
Alert ("매개변수 수: "args.length);//출력: 매개변수 수: 4
Alert("아래 첨자 인덱스가 3인 매개변수:" 인수[3]);//출력: 아래 첨자 인덱스가 3인 매개변수 :Hello
}
} window.onload=function(){
showParamsCount("Hello",4,5,"Hello");
}
또 알아야 할 점은 JS에서는 함수의 명명된 매개변수가 필요하지 않기 때문에 호출 시 전달되는 매개변수의 개수를 알고 싶다면 인수를 통해 매개변수를 가져와야 한다는 것입니다.
다음은 간단한 메소드 오버로딩입니다.
function showMessage(){
if (arguments. length==1){
Alert(arguments[0]); ; showMessage("안녕하세요!");
showMessage ("장산","안녕하세요 여동생");
}
이런 식으로 JS 오버로딩이 구현됩니다.
Advanced Programming in JS라는 책을 읽으면서 인수의 값이 항상 해당 명명된 매개변수의 값과 동기화된다는 사실을 발견했습니다. 이전에는 이 문제를 발견한 적이 없었습니다.
코드 복사
코드는 다음과 같습니다.
function showMessage(name,msg){
인수[1]="msg 값을 변경할 수 있습니다.";
Alert(name "Say:" msg);//출력: Zhang San Say: msg 값을 변경할 수 있습니다
}
Window.onload=function(){
showMessage("Zhang San","Hi your sister")
자, 이것이 js "오버로딩"에 대한 기본 지식의 전부입니다