2014-08-28 2 views
1
function foobar(){ 
    alert("Hello World"); 
} 


var funcName = "foobar"; 
var func = window[funcName]; 
if (typeof func === "function") func(); 

안녕하세요!윈도우에서 배열로 자바 호출 함수 [문자열]

var functions = { 
    function1 : function(){ return }, 
    function2 : function(){ return }, 
    function3 : function(){ return }, 
    function4 : function(){ return } 
} 

과 같은 함수를 함수의 목적으로 호출하고 싶습니다.

나는

window["functions.function1"] // or 
window["functions['function1']"] 

을 시도하고 그들은 작동하지 않습니다! 이것을 어떻게 할 수 있습니까? 감사합니다.

편집 : "함수 배열 사용" 기능의 대상으로. "

+1

그건 배열이 아닙니다. 그게 목표 야. –

답변

1

문자열을 사용하여 개념을 고집, 그것은 것입니다 : 당신이 그것을위한 하나의 문자열을 원하는 경우

window["functions"]["function1"](); 

, 당신은 split를 사용하고 부품을 통해 걸을 수 :

var name = "functions.function1"; 
callFunction(name); 

function callFunction(name) { 
    var parts = name.split("."); 
    var n; 
    var obj = window; 
    for (n = 0; n < parts.length; ++n) { 
     obj = obj[parts[n]]; 
     if (!obj) { 
      return; 
     } 
    } 
    return obj ? obj() : undefined; 
} 

사이드 노트 : window의 모든 속성은 전역입니다. 전역 네임 스페이스는 입니다. 놀랍게도이 붐비기 때문에 더 많은 전역을 추가하는 것은 나쁜 아이디어입니다 (tm)입니다. 대신 스코핑 함수에 코드를 래핑하고 window 대신 자신의 객체를 사용하십시오.

관련 문제