2016-09-11 2 views
-2

어떻게 자바 스크립트 객체를 통해 루프를 돌리고 원하는 객체 속성이 함수가 될 경우 해당 함수를 실행 하시겠습니까?
예를 들어, 아래 코드는 객체를 반복하고 일부 입력을 기반으로 속성을 출력합니다. 예제에서 command.first은 정상적으로 출력하지만 command.clear을 출력하려고하면 실제 함수가 문자열로 반환됩니다.
출력 : 특정 값이 Function 개체의 인스턴스 인 경우 "function(){ document.getElementById("output").innerHTML = "";"메소드 속성이있는 자바 스크립트 객체 탐색

var command = new Object(); 

command.first = "First string"; 

command.clear = function() { 
    document.getElementById("output").innerHTML = "someStuff"; 
}; 

for(var key in command) { 

    if(key == input) { 

     document.getElementById("output").innerHTML = command[input]; 

    } 

} 
+0

기능을 실행하려면'()'이 필요합니다. 그것들이나'.call() '과 같은 일을한다. – vlaz

+0

함수이기 때문에 함수를 출력한다. 귀하의 질문은 무엇인가? – zerkms

+2

작동하는지 확인한 다음 코드를 확인하십시오. http://stackoverflow.com/questions/5999998/how-can-i-check-if-a-javascript-variable-is-function-type –

답변

1

아무것도 반환하지 않는 함수를 innerHTML로 설정하지 않아도 함수를 실행하려면 함수에 '()'을 포함해야합니다. 이 방법을 사용하십시오.

var command = new Object(); 
command.first = "First string"; 
command.clear = function() {  
document.getElementById("output").innerHTML= "someStuff"; 
}; 
for (var key in command) { 
if (key == input) { 
if(typeof(command[input])=="function"){ 
command[input]() 
    } 
else{ 
document.getElementById("output").innerHTML= command[input] 
} 
} 
} 
1

확인합니다.

var command = new Object(); 

command.first = "First string"; 
command.clear = function() { 
    return "someStuff"; 
}; 

for(var key in command) { 
    if(key == input) { 
     document.getElementById("output").innerHTML = command[input] instanceof Function ? command[input]() : command[input]; 
    } 
} 

당신은 clear 직접 요소의 innerHTML 속성을 변경하지 않는 것을 볼 수 있습니다 (화살표 기능을 포함) 모든 함수는 항상 Function의 인스턴스입니다. 그냥 문자열을 반환하고이 문자열은 for 루프 내에 innerHTML 속성 값으로 할당됩니다.

+1

프로토 타입 체인을 검사하는 대신'x typeof === "function"'을 사용하는 것이 더 쉽습니다. – vlaz

+0

엄격한 비교를 사용하지 않는 이유는 무엇입니까? –

+0

[답변] (http://stackoverflow.com/a/6625960/1287643)에 대한 답변이 있습니다.이 특별한 경우에는 어떤 차이점도 보이지 않지만 귀하가 옳고 일반적으로 확인하는 것이 좋습니다. 특정 참조가'typeof'를 사용하는 함수 인 경우. –

관련 문제