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
반응형
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
객체를 반환하는 ECMAScript 6 화살표(=>) 함수 (0) | 2021.12.03 |
---|---|
JavaScript에서 for… of 구문을 사용하여 loop counter/index 가져 오기 (0) | 2021.12.01 |
JavaScript에서 연관 배열 / 해싱을 수행하는 방법 (0) | 2021.11.30 |
JavaScript에서 변수의 범위에 대해서 (0) | 2021.11.30 |
"radio"입력 필드에 "required"속성을 사용하는 방법 (0) | 2021.11.30 |