Javascript对象中的变量方法

Javascript对象中的变量方法,javascript,variables,methods,Javascript,Variables,Methods,当我有一个包含该方法名的变量时,我想检查JavaScript方法是否存在 使用PHP,我可以做到这一点: $method = 'bar'; $object = new Foo; if(method_exists($object, $method)) { //Foo->bar() } 如何在JavaScript中实现这一点?我的第一次尝试失败了: var method = 'bar'; if(typeof(obj.method) != "undefined") { obj.

当我有一个包含该方法名的变量时,我想检查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();
}

使用
方法
作为
obj
对象的键,检查属性的
类型是否为
“函数”

((typeof obj[method] === "function") ? obj[method] : obj.default)();
您应该将对象的method属性设置为typeoffunction。例如

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

解释如何检查函数。

我通常只做
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();
}

如果你想用一行的话,也可以用。

['blah']
。blah
在Javascript对象中是等价的,所以你可以像这样调用你的方法

obj[method]();

其中method是一个包含要调用的方法名称的字符串。

+1用于将try/catch作为Javascript中未充分使用的选项。但这不起作用,因为
method
实际上是一个保存方法真实名称的变量。+1注意,
typeof variable
会说
'function'
当它真的不可用时。需要将
obj.method
更改为
obj[method]
(您已经第一次使用了它,但第二次没有了。这不起作用。问题是
method
是一个包含方法名称的变量。需要说
obj[method]
,而不是
obj.method
obj[method]();