자바스크립트 문자열로 함수를 실행하는 방법

2020. 11. 20. 01:40·개발/JavaScript

함수의 이름을 변수의 문자열로 저장하고, 이 문자열을 사용해 함수를 호출할 수 있습니다. 문자열로 과연, 함수를 어떻게 실행할 수 있을까요? 몇 가지 방법이 있습니다.

이 글은 How to execute a Javascript function when its name as a string 및 How to execute a JavaScript function when I have its name as a string의 예시 및 답변을 인용 및 정리한 글입니다.

eval()

eval을 사용하는 방법으로 간단하지만, 정말로 꼭 사용해야 하는 경우가 아니라면 사용하지 않는 것이 좋습니다.

function fnLogin(userName, password) {
    console.log("User: " + userName);
    console.log("Pass: " + password);
}

function fnLogout() {
    console("Logged out");
}

var strfn = "fnLogin"
strfn(); // TypeError: strfn is not a function
eval(strfn + "('user1', 'pwd')");
eval("fnLogout()");

객체에 할당해 처리

function fnLogin(userName, password) {
    console.log("User: " + userName);
    console.log("Pass: " + password);
}

function fnLogout() {
    console("Logged out");
}

var strfn = "fnLogin"

let context = {}; // 함수를 할당할 객체를 생성

context["fnLogin"] = fnLogin;
context["fnLogout"] = fnLogout;

function execFn (fnName, context /*, args */) {
  let args = Array.prototype.slice.call(arguments, 2);
  return context[fnName].apply(context, args);
}

exeFn(strfn, context, "user2", "pwd2");
exeFn("fnLogout", context")

닷 노테이션 대신 브라켓을 활용

x.y.foo()는 x.y['foo']() 또는 x['y']['foo']() 또는 window['x']['y']['foo']()로 대체할 수 있습니다.

window["functionName"](arguments);
window["My"]["Namespace"]["functionName"]();

클라스의 활용

class X {
  method1(){
    console.log("1");
  }
  method2(){
    this['method1']();
    console.log("2");
  }
}
let x  = new X();
x['method2']();

'개발 > JavaScript' 카테고리의 다른 글

자바스크립트 sort() 메소드 사용 방법 정리  (0) 2020.11.20
자바스크립트 메모이제이션 설명  (0) 2020.11.17
자바스크립트 arguments를 사용한 가변 인자 함수 활용  (0) 2020.11.14
'개발/JavaScript' 카테고리의 다른 글
  • 자바스크립트 동기/비동기 차이점은 무엇일까요?
  • 자바스크립트 sort() 메소드 사용 방법 정리
  • 자바스크립트 메모이제이션 설명
  • 자바스크립트 arguments를 사용한 가변 인자 함수 활용
휘Hwi
휘Hwi
여행, 사진, 개발, 책 이야기를 기록하는 여행자 휘의 블로그 𓂍
  • 휘Hwi
    휘: 끝나지 않은 이야기
    휘Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 기록
        • 일상 에세이
        • 인사이트
        • 투자와 재테크
        • 코인 이야기
        • 아카이빙
        • 집무실 레터
        • 사랑에 대하여
        • 번역 이야기(完)
        • 프리랜서 일지(完)
      • 여행
        • 🌎 세계 여행기 S1 (完)
        • 🌊 삼삼한 여행기 (完)
        • 🚶 온더로드
        • 🇯🇵 일본
        • 🏝️ 발리
        • 🇻🇳 베트남
        • 🇱🇰 스리랑카
        • 🇮🇳 인도
        • 🇹🇭 태국
        • 🇸🇬 싱가포르
        • 🇦🇺 호주
        • 🇭🇰 홍콩
        • 🇰🇷 한국
        • 🍚 여행자의 한 끼
        • ℹ️ 여행 정보
      • 사진
        • 사진가
        • 사진 이론과 생각
        • 사진 관련 정보
      • 영상
        • 파이널컷 모션 공부
        • 고프로 GoPro
        • 영상 관련 정보
      • 책
        • 책 읽고 쓰기
      • 개발 N
        • 티스토리
        • Internet
        • HTML
        • CSS
        • JavaScript
        • Typescript
        • React
        • Node.js
        • Express
        • NestJS
        • Python
        • Django
        • MySQL
        • MongoDB
        • AWS
        • Deployment
        • Terminal
        • Git N
        • Glossaries
        • Articles
        • Projects
        • TIL;
      • 미분류
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
휘Hwi
자바스크립트 문자열로 함수를 실행하는 방법
상단으로

티스토리툴바