2014-04-05 2 views
0

WSH Jscript의 배열에 함수 이름이 있습니다. 루프에서 호출해야합니다. 알 여기서 찾은 것 Javascript - Variable in function name, possible?하지만이 작동하지 않습니다, 어쩌면 내가 WSH 사용 및/또는 브라우저가 아닌 콘솔에서 스크립트를 실행하기 때문에.Jscript - 함수 이름의 변수, 가능합니까?

var func = [ 
    'cpu' 
]; 

func['cpu'] = function(req){ 
    WScript.Echo("req="+req); 
    return "cpu"; 
} 

for (var item in func) { 
    WScript.Echo("item="+ func[item](1)); 
} 

결과는 다음

그래서, 환경 변수의 이름을 이용하여 함수를 호출 할 수있는 방법이 존재

C:\test>cscript b.js 
Microsoft (R) Windows Script Host Version 5.6 
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. 

C:\test\b.js(11, 2) Microsoft JScript runtime error: Function expected 

(이 WScript.Echo 라인이다)?

답변

2

아니요, 문제는 명령 줄이 아닌 WSH입니다.

이 코드에서 무엇을 가지고 :

입니다
var func = [ 
    'cpu' 
]; 

, 그것은 하나 개의 요소 배열. 요소의 내용은 'CPU'이고 인덱스 0 배열 길이가 1

func['cpu'] = function(req){ 
    WScript.Echo("req="+req); 
    return "cpu"; 
} 

이 배열 콘텐츠에 배열 객체하지 이상의 원소를이 추가적으로 속성을 추가이다. 테스트하면 배열 길이는 여전히 1입니다.

for (var item in func) { 
    WScript.Echo("item="+ func[item](1)); 
} 

이 작업은 배열의 내용을 반복합니다. item은 배열의 각 요소 색인을 검색 한 다음 내용 검색에 사용됩니다. 그러나 배열의 내용은 인덱스 0을 가진 하나의 요소이고 내용은 문자열 (cpu)입니다. 그것은 함수가 아니므로 호출 할 수 없습니다.

문제는 개체 작업 방법과 배열 작업 방법을 혼용한다는 것입니다. 오브젝트 버전

var func = { 
    cpu : function(req){ 
     return 'called cpu('+req+')'; 
    }, 
    other : function(req){ 
     return 'called other('+req+')'; 
    } 
}; 

func['more'] = function(req){ 
    return 'called more('+req+')'; 
}; 

for (var item in func) { 
    WScript.Echo('calling func['+item+']='+ func[item](1)); 
}; 

를 들어 배열 버전

var func = [ 
    function cpu(req){ 
     return 'called cpu('+req+')'; 
    }, 
    function other(req){ 
     return 'called other('+req+')'; 
    } 
]; 

func.push(
    function more(req){ 
     return 'called more('+req+')'; 
    } 
); 

for (var item in func) { 
    WScript.Echo('calling func['+item+']='+ func[item](1)); 
}; 

를 들어

당신이 볼 수 있듯이 당신이 배열 작업하는 경우, 매우 비슷하지만, 당신은 배열에 요소를 추가해야합니다, 배열의 요소를 반복합니다 (for in). 객체 접근법의 경우 객체에 속성을 추가하고 for in은 객체의 속성을 반복합니다.

매우 유사하지만 동일하지는 않습니다.