2014-11-07 2 views
0

배열에 함수를 추가하려고합니다. 이것들은 'opdracht1'에서 'opdracht10'까지 명명되어야합니다. 그러나 이름을 지정하는 방법을 알아낼 수는 없습니다.JS - 함수를 배열에 넣고 이름을 지정하십시오.

var opdrachtArray = []; 
 

 
for (i = 0; i < 10; i++) { 
 
    opdrachtArray.push(function() {func(i); }); 
 
}

그것은 기능을 추가하지만 앞서 말했듯이 내가 이름을 추가하는 방법을 찾을 수 없습니다.

또한 나중에 함수를 정의하고 필요할 때 호출 할 수 있습니까?

+0

왜 이름을 지정해야합니까? – elclanrs

+0

나는 각 기능을 내가하고있는 것에 대한 별도의 과제로 사용하기 때문에. 이를 통해 나는 그들을 개별적으로 편집하고 분리 할 수 ​​있습니다. – OriginDutch

+0

XY 문제처럼 냄새가납니다 ... 그러나 배열 대신 키/값 개체를 사용하려고 할 수 있습니다. – elclanrs

답변

0

각 함수는 이름, 사용 사전되지 배열에 할당하려면 다음

var opdrachtDict = {}; 
 
    for (i = 0; i < 10; i++) { 
 
     opdrachtDict["opdracht"+i]=func.bind(null,i); 
 
    } 
 
    function func(i){ 
 
     alert(i); 
 
    } 
 

 
    opdrachtDict["opdracht3"](); //ok, lets call it and see if you think its still a wrong answer ;)...

+0

"Unexptected Token ["@ line 3 – OriginDutch

+0

opdrachtArray 뒤에 점을 제거하면 작업이 완료됩니다. – axelduch

+0

Yup! 고마워요! – OriginDutch

1

이름 당신의 기능을 window 오브젝트를 배치하여 :

for (i = 0; i < 10; i++) { 
    f = function() { func(i); }); // but see below 
    window['opdracht' + i] = f 
    opdrachtArray.push(f); 
} 

그러나 기본적인 문제가 있습니다. i 이상 가까운 따라서 func 항상 즉, 루프 완료 후 i의 값으로 호출 될 것입니다 귀하의 모든 기능 (10) 하나의 솔루션은 다음과 같습니다 다음

function make_func(i) { 
    return function() { 
     return func(i); 
    }; 
} 

for (i = 0; i < 10; i++) { 
    f = make_func(i); 
    window['opdracht' + i] = f; 
    opdrachtArray.push(f); 
} 

또는

for (i = 0; i < 10; i++) { 
    (function(i) { 
     var f = function() { func(i); }; 
     window['opdracht' + i] = f 
     opdrachtArray.push(f); 
    }(i)); 
} 

또는 단지 func.bind(null, i)을 사용하십시오. 이는 거의 동일한 작업을 수행합니다.

for (i = 0; i < 10; i++) { 
    f = func.bind(null, i); 
    window['opdracht' + i] = f; 
    opdrachtArray.push(f); 
} 
+0

코드가 오류를 발생시키는 것 같습니다. "잡히지 않은 유형 오류 : 정의되지 않은 함수가 없습니다" – OriginDutch

+0

@OriginDutch : 오류를 재현 할 수 없으며 그 오류의 출처를 상상할 수 없습니다. –

+0

jsFiddle이 좋습니다. – nicael

0
당신은 객체의 이름과 기능을 저장하고 배열에 각 개체를 밀어 수

:

var opdrachtArray = []; 

for (i = 0; i < 10; i++) { 
    var name = 'opdracht' + (i+1); 
    opdrachtArray.push({name : name, callback : function() {func(i); }}); 
} 
0

잘 전역에서 정의 된 함수가 단지의 특성 인 끝 self/window 어쨌든. 즉 :

function mr_function(){return 5;} 
self["mr_function"]; 
window["mr_function"]; 

모두 (self/window의 속성은) 우리가 정의 된 함수를 참조. 조심하면 함수 이름을 그렇게 지정할 수 있습니다. 또는 전역 적으로 만들지 않으려면 다른 객체의 속성에 할당하십시오.

관련 문제