2011-08-10 6 views
0

JavaScriptメソッドが存在するかどうかを確認するために、そのメソッド名を持つ変数を内部に持っているかどうかを確認します。Javascriptオブジェクトの変数メソッド

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

私はJavaScriptでこれを行うことができます方法:私はこれを行うことがPHPを使用して

?私の最初の試みは失敗しました:

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

答えて

7

チェックをtypeofプロパティがobjオブジェクトへのキーとしてmethodを使用して、"function"の場合:

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

+1実際にそうでない場合、 'typeof variable'が' 'function''と言うエッジケースがあります。 – alex

+1

'obj.method'を' obj [method] 'に変更する必要があります(最初の使用ではなく、2番目ではありません) – 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/catchを使用することができます:あなたは1行にそれをしたい場合は

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

しかし、これは 'メソッドは実際にはメソッドの実名を保持する変数です。 – nnnnnn

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

は、あまりにも動作します。

1

['blah'].blahはJavaScriptオブジェクトでは同じですので、あなたは、メソッドが呼び出すメソッドの名前を含む文字列をある

obj[method](); 

のようなあなたのメソッドを呼び出すことができます。

関連する問題