프로그래밍 언어/HTML,CSS,JS

이름이 문자열 일 때 JavaScript 함수를 실행하는 방법

Rateye 2021. 11. 30. 09:48
728x90
반응형
질문 : 이름이 문자열 일 때 JavaScript 함수를 실행하는 방법

JavaScript의 함수 이름이 문자열로 있습니다. 나중에 호출 할 수 있도록 함수 포인터로 어떻게 변환합니까?

상황에 따라 다양한 인수를 메서드에 전달해야 할 수도 있습니다.

namespace.namespace.function(args[...]) 형식을 취할 수 있습니다.

답변

절대적으로 다른 선택의 여지가 없다면 eval 사용하지 마십시오.

언급했듯이 다음과 같은 것을 사용하는 것이 가장 좋은 방법입니다.

window["functionName"](arguments);

그러나 네임 스페이스 함수에서는 작동하지 않습니다.

window["My.Namespace.functionName"](arguments); // fail

다음과 같이 할 수 있습니다.

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

더 쉽게 만들고 약간의 유연성을 제공하기 위해 다음과 같은 편의 기능이 있습니다.

function executeFunctionByName(functionName, context /*, args */) {
  var args = Array.prototype.slice.call(arguments, 2);
  var namespaces = functionName.split(".");
  var func = namespaces.pop();
  for(var i = 0; i < namespaces.length; i++) {
    context = context[namespaces[i]];
  }
  return context[func].apply(context, args);
}

다음과 같이 부를 것입니다.

executeFunctionByName("My.Namespace.functionName", window, arguments);

원하는 컨텍스트로 전달할 수 있으므로 위와 동일하게 수행됩니다.

executeFunctionByName("Namespace.functionName", My, arguments);
출처 : https://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string
728x90
반응형