2011-08-10 13 views
0

내부에 메소드 이름을 가진 변수가있을 때 자바 스크립트 메소드의 존재 여부를 검사 할 필요가 있습니다.자바 스크립트 객체의 변수 메소드

$method = 'bar'; 
$object = new Foo; 
if(method_exists($object, $method)) 
{ 
    //Foo->bar() 
} 

이 어떻게 자바 스크립트에서이 작업을 수행 할 수 있습니다

난 할 수 PHP를 사용하고 계십니까? 내 첫 번째 시도는 실패

var method = 'bar'; 
if(typeof(obj.method) != "undefined") 
{ 
    obj.method(); 
} 
else 
{ 
    obj.default(); 
} 

답변

7

이 건물은 obj 객체로 키로 method를 사용하여, "function"typeof 경우 체크인 :

((typeof obj[method] === "function") ? obj[method] : obj.default)(); 
+0

+1 실제로 변수가 아니라면'typeof variable'이''function''이라고 말할 수있는 경우가 있습니다. – alex

+1

'obj.method'를'obj [method]'로 바꿀 필요가 있습니다 (두 번째가 아니라 첫 번째 사용을 위해 이미 가지고 있습니다.) – nnnnnn

0

당신은 객체의 방법 속성이 대해서 typeof로한다이고 기능은입니다. 예 :

if (typeof(obj[method]) == "function") { 
    obj[method](); 
} 

Here is a JSFiddle 기능을 확인하는 방법을 설명합니다.

+1

이것은 작동하지 않습니다. 메소드의 이름. obj.method 대신에'obj [method]'가 필요합니다. – nnnnnn

4

나는 일반적으로 단지 if(obj.method) {...}을하지만 당신은 항상 시도/캐치를 사용할 수 있습니다 : 당신이 한 줄이 원하는 경우

try { 
    obj.method(); 
} catch(e) { 
    // obj or obj.method didn't exist, so let's try plan b 
    obj.planB(); 
} 
+0

Javascript에서 잘 활용되지 않는 옵션으로 try/catch를 언급 할 때 +1합니다. – jfriend00

+2

그러나' method'는 실제로 메소드의 실제 이름을 보유하는 변수입니다. – nnnnnn

2
(obj[method] || obj.default)(); 

역시 작동합니다.

1

['blah'].blah는 자바 스크립트 객체에 해당하는, 그래서 당신이 방법은 호출 할 메소드의 이름을 포함하는 문자열입니다

obj[method](); 

처럼 메서드를 호출 할 수 있습니다.

관련 문제