우리 모두는 js에서 메소드 오버로딩을 직접 구현할 수 있는 방법이 없다는 것을 알고 있습니다. 왜냐하면 이름은 같지만 매개변수 개수가 다른 여러 메소드가 js에 정의되어 있으면 마지막 메소드만 실제로 호출될 수 있고 다른 모든 메소드는 덮어쓰기되기 때문입니다. .
그러나 각 함수에는 메소드 오버로딩을 구현하는 데 사용할 수 있는 특수 매개변수 인수가 있습니다.
예:
function Add(firstnumber ,sencondnumber) {
return firstnumber sencondnumber;
}
는 매개변수가 여러 개이거나 매개변수가 없으면 하나의 매개변수만 처리할 수 있습니다. 매개변수가 전달되지 않으면 firstnumber 및 secondnumber가 정의되지 않습니다. 매개변수가 전달되면 이는 firstnumber에만 값을 할당하는 것과 동일하며 sencondnumber는 여전히 정의되지 않습니다. 반대로 2개 이상의 매개변수가 전달되면 firstnumber와 secondnumber에 값이 할당되는 것과 같습니다. 다른 매개변수가 있더라도 처리 시 무시됩니다. 다른 매개변수를 얻을 수 있으면 자연스럽게 처리할 수 있습니다. 이 시점에서는 함수의 특수 매개변수 인수를 생각할 수 있어야 하며, 여기에는 함수에 전달된 모든 매개변수가 포함되어 있어 메소드 오버로딩 효과를 얻을 수 있습니다.
위 방법을 다음과 같이 수정합니다.
function Add(firstnumber,sencondnumber) {
if (arguments.length == 0)//매개변수가 전달되지 않았습니다
{
return null; if (arguments.length == 1) {//전달되는 것은 매개변수입니다
return firstnumber;//반환 인수로 쓸 수도 있습니다[0]
}
else if(arguments. 길이 == 2)//전달되는 것은 두 개의 매개변수
{
return firstnumber sencondnumber;//return 인수로도 쓸 수 있습니다[0] 인수[1]
; >
else {
var total =0;
for (var i = 0; i < 인수.길이; i ) {
total=total 인수[i]
}
return total;
}
}
물론 이 방법의 단점은 함수 구현이 순서에 따라 달라질 수 있다는 점입니다. 매개변수의 경우 null을 자리 표시자로 전달하는 등 특수 처리를 수행해야 합니다.
함수에 전달되는 매개변수는 엄격하게 함수가 정의된 순서대로 각 매개변수에 할당되므로 두 번째 매개변수에만 값을 할당하려면 두 개의 매개변수를 전달해야 하며, 그렇지 않으면 전달된 값이 실제로 할당되었습니다. 첫 번째 매개변수는 지정되었지만 두 번째 매개변수에는 값이 할당되지 않았습니다.
예를 들어 sencondnumber에만 값을 전달하고 firstnumber에는 값을 전달하고 싶지 않은 경우 다음과 같이 Add(null,2)를 호출해야 합니다(물론 함수는 다음을 처리해야 합니다). 내부에 특별한 값을 전달하는 경우), 이렇게 Add(2)를 호출하면 실제로는 firstnumber에 값이 전달되는데, 이는 매개변수가 전달되는 경우를 호출하는 것과 같습니다.