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

JavaScript 내장 객체 프로토타입 수정 방법과 주의사항

결론부터 말씀드리면, 가능합니다. JavaScript는 유연한 동적 언어로, Array, String, Object와 같은 내장 객체의 프로토타입을 수정하거나 확장할 수 있으며, window.alert()처럼 자주 사용되는 전역 함수조차 런타임에 재정의할 수 있습니다.

프로토타입을 수정하면 기존 타입에 새로운 메서드를 추가하거나 기본 동작을 원하는 방식으로 바꿀 수 있습니다. 아래 예제에서는 window.alert를 사용자 정의 함수로 덮어써, 브라우저 기본 알림 창 대신 페이지 내 결과 영역에 메시지를 출력하도록 만들어 보겠습니다.

예제: window.alert 재정의하기

<!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: 20px;
      font-weight: 500;
      color: blueviolet;
   }
</style>
</head>
<body>
<h1>내장 객체 프로토타입 수정하기</h1>
<div class="result"></div>
<br />
<button class="Btn">클릭하세요</button>
<h3>위 버튼을 클릭하면 alert 메서드가 호출됩니다</h3>
<script>
   let resEle = document.querySelector(".result");
   let BtnEle = document.querySelector(".Btn");
   window.alert = function (msg) {
      resEle.innerHTML = "사용자 정의 Alert 함수가 호출되었습니다<br>";
      resEle.innerHTML += "Alert 메시지 = " + msg;
   };
   BtnEle.addEventListener("click", () => {
      alert("Hello World");
   });
</script>
</body>
</html>

실행 결과

위 코드를 실행하면 다음과 같은 화면이 나타납니다.

JavaScript 내장 객체 프로토타입 수정 방법과 주의사항

[클릭하세요] 버튼을 누르면 기본 alert 대신 재정의된 함수가 실행되어, 결과 영역에 다음과 같이 출력됩니다.

JavaScript 내장 객체 프로토타입 수정 방법과 주의사항

동작 원리

window.alert = function (msg) {...} 구문은 전역 객체인 windowalert 속성을 새로운 함수로 교체합니다. 이후 코드에서 alert()를 호출하면 브라우저가 기본적으로 제공하는 알림 창이 아니라, 우리가 정의한 함수가 대신 실행됩니다.

내장 프로토타입 수정 시 주의사항

  • 호환성 충돌: 여러 라이브러리나 스크립트가 같은 메서드를 서로 다르게 재정의하면 예기치 않은 오류가 발생할 수 있습니다.
  • 프로토타입 오염: Object.prototype을 잘못 수정하면 모든 객체에 영향을 미쳐 보안 취약점으로 이어질 수 있습니다.
  • 열거 가능성 문제: 단순 할당으로 추가한 메서드는 for...in 루프에 노출될 수 있으므로, 필요하다면 Object.defineProperty()enumerable: false 옵션을 지정하는 것이 안전합니다.
  • 유지보수성: 표준 동작을 변경한 코드는 다른 개발자가 이해하기 어려우므로, 꼭 필요한 경우에만 신중하게 사용해야 합니다.

이처럼 내장 객체 프로토타입 수정은 매우 강력한 기능이지만, 실무에서는 폴리필(polyfill) 구현처럼 꼭 필요한 상황에 한정해서 사용하는 것이 좋습니다.