2011-08-10 51 views
0

我用魔杖檢查JavaScript方法的存在,當我有一個帶有該方法名稱的變量時。Javascript對象中的變量方法

使用PHP我可以這樣做:

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

我怎樣才能做到這一點在JavaScript?我第一次嘗試失敗:

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

回答

7

檢查是否typeof屬性爲"function",使用method作爲鑰匙插入obj對象:

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

+1請注意,有些邊緣情況下'typeof variable'會在沒有的時候說'function'。 – alex

+1

需要改變'obj.method'到'obj [method]'(你已經得到它的第一次使用,但不是第二個。 – nnnnnn

0

你應該對象的方法屬性爲的typeof as function。例如。

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

Here is a JSFiddle解釋如何檢查功能。

+1

這不會工作。問題是'方法'是一個變量持有方法的名稱。需要說'obj [method]'而不是'obj.method'。 – nnnnnn

4

我通常只是做if(obj.method) {...},但你總是可以使用一個try/catch:

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

用於提及try/catch作爲Javascript中未充分利用的選項的+1。 – jfriend00

+2

但是這不起作用,因爲' method'實際上是一個包含方法真實名稱的變量。 – nnnnnn

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

會的工作也一樣,如果你想要一個行吧。

1

['blah'].blah在Javascript對象相等的,所以你可以調用你的方法一樣

obj[method](); 

Where方法是包含要調用的方法的名稱的字符串。