Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript '생성자가 아닙니다(Not a Constructor)' 오류 원인과 해결 방법

JavaScript에서 '~ is not a constructor'(생성자가 아닙니다) 오류는 실제로 생성자(constructor)가 아닌 객체나 변수를 마치 생성자처럼 사용하려고 할 때 발생합니다.

오류가 발생하는 이유

이 오류는 주로 다음과 같은 경우에 나타납니다.

  • 숫자, 문자열 등 일반적인 값(원시 타입)을 new 키워드와 함께 호출하는 경우
  • 화살표 함수(arrow function)를 생성자로 사용하려는 경우 — 화살표 함수는 자체 this 바인딩을 가지지 않기 때문에 생성자로 사용할 수 없습니다.
  • 모듈에서 잘못된 방식(default import vs named import)으로 클래스를 가져온 경우

아래 코드는 변수를 생성자로 사용했을 때 이 오류가 어떻게 발생하는지 보여주는 예시입니다.

예제 코드

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    .result {
        font-size: 18px;
        font-weight: 500;
        color: rebeccapurple;
    }
</style>
</head>
<body>
<h1>생성자가 아닙니다(Not a constructor) 오류</h1>
<div class="result"></div>
<button class="Btn">클릭하세요</button>
<h3>위 버튼을 클릭하면 일반 변수를 생성자처럼 호출합니다</h3>
<script>
    let resEle = document.querySelector(".result");
    let BtnEle = document.querySelector(".Btn");
    let b = 22;
    BtnEle.addEventListener("click", () => {
        try {
            new b();
        }
        catch (err) {
            resEle.innerHTML = err;
        }
    });
</script>
</body>
</html>

실행 결과

위 코드를 실행하면 화면에 제목과 버튼이 표시됩니다.

JavaScript  생성자가 아닙니다(Not a Constructor)  오류 원인과 해결 방법

'클릭하세요' 버튼을 누르면 다음과 같은 결과가 나타납니다.

JavaScript  생성자가 아닙니다(Not a Constructor)  오류 원인과 해결 방법

버튼을 클릭하면 숫자 값 22를 담고 있는 변수 bnew b() 형태로 호출하게 되는데, 숫자는 생성자가 아니기 때문에 TypeError: b is not a constructor 오류가 발생하고, 이 오류 메시지가 .result 영역에 출력됩니다.

오류를 피하는 방법

  • new 키워드는 반드시 함수 또는 클래스와 함께 사용해야 합니다.
  • 화살표 함수 대신 일반 함수 선언문이나 class 문법을 사용하세요.
  • ES 모듈을 사용할 때는 해당 클래스가 default export인지 named export인지 확인한 후 올바른 방식으로 import 하세요.

이처럼 생성자 오류는 대부분 잘못된 대상을 new로 호출하는 단순한 실수에서 비롯되므로, 오류 메시지에 표시된 변수나 함수의 타입을 먼저 확인하면 쉽게 해결할 수 있습니다.