JavaScript에서 시뮬레이션된 함수 오버로딩

5663 단어 javascript
JavaScript는 함수 오버로딩을 지원하지 않을 수 있지만 동작을 시뮬레이션할 수 있습니다.

함수 오버로딩이란



function overloading or method overloading is the ability to create multiple functions of the same name with different implementations. -- Function overloading



기타 언어



다른 언어에서는 같은 이름의 다른 함수를 추가하여 오버로드된 함수를 만들 수 있습니다.

// C#

void doThing(int x)
{
    Console.WriteLine("int x");
}

void doThing(string y)
{
    Console.WriteLine("string y");
}


두 번째 함수가 첫 번째 함수를 덮어쓰므로 JavaScript에서는 이 작업을 수행할 수 없습니다.

함수 오버로딩 동작 시뮬레이션



내가 하고 싶은 것은 명명된 인수 기능을 갖는 것이지만 전통적인 인수도 지원하는 것입니다. 따라서 다음 두 가지 방법 모두에서 내 기능을 호출하고 작동하도록 하고 싶습니다.

// Traditional
doThing(3, 4);

// Named Arguments
doThing({ x: 3, y: 4 });


이 동작을 시뮬레이션하는 한 가지 방법은 함수 인수 유형을 감지하는 것입니다.

function doThing(x, y) {
    // detect named argument object
    if (typeof x === 'object' && x != null) {
        return doThing(x.x, x.y)
    }

    console.log({ x, y })
}

// ✅ Now both styles work!
doThing(3, 4);
doThing({ x: 3, y: 4 });


이 예에서 첫 번째 인수xobject 유형인지 확인하기 위해 테스트됩니다. 일치하면 x 에서 가져온 매개변수로 함수가 호출됩니다.

권장 행동



JavaScript는 기본적으로 함수 오버로딩을 지원하지 않기 때문에 일반적으로 두 개의 개별 함수를 만들고 함수 오버로드를 시도하지 않는 것이 좋습니다.

// Sometimes it is better to create two separate functions.
function readFile(fileName) { /* code */ }
function readFileContents(contents) { /* code */ }


그러나 명명된 인수를 지원하고 기존 인수와의 하위 호환성을 유지하기를 원하기 때문입니다. 따라서 이 경우에는 Simulated Function Overloading이 허용 가능한 솔루션보다 높다는 것을 알았습니다.

헐 박사



JavaScript는 기본적으로 함수 오버로딩을 지원하지 않지만 매개변수 유형을 확인하여 이를 시뮬레이션할 수 있습니다. 서로 다른 동작에 대해 두 개의 개별 함수를 만드는 것을 선호합니다. 그러나 어떤 경우에는 Simulated Function Overloading도 좋은 솔루션입니다.
  • 내 📰를 확인하십시오 Newsletter
  • 제 📺 유튜브 구독하기,
  • Twitter에서 나에게 인사해

  • 건배 🍻

    israel palacioUnsplash의 사진

    좋은 웹페이지 즐겨찾기