2010-11-30 75 views

回答

4

您对功能的检查typeof,例如:

if(typeof this["functionName"] != "undefined") { 
    alert("uh oh, doesn't exist"); 
} 

如果你需要检查它是否存在,是一个功能是多余的肯定:

if(typeof this["functionName"] == "function") { 
    this["functionName"](); //it exists, call it 
} 

或者更轻松的版本:

if(this["functionName"]) this["functionName"](); 

如果名称不变(例如,我误解了问题),只要用点符号,就像这样:

if(this.functionName) this.functionName(); 

或者当然,这并不一定是this ...无论对象你检查,请使用,如果它是一个全球性的功能使用window

+1

如果'functionName'不是函数呢? – jAndy 2010-11-30 12:04:35

+0

@jAndy - 他想要一个函数来调用这个函数,这个函数可能会或可能不会被定义......你当然可以改变它,并检查`.toString()`或`typeof`作为`function`,但我会说你在这些情况下有不好的命名重叠...通常你想要两个,例如它可能是一个函数或选择器,或者一个布尔,这个跨框架有几个例子:) – 2010-11-30 12:06:24

1

取决于几乎你所在的范围。

但总的来说if('function_name_to_check' in this)将返回true如果其中有名称的全局或局部范围的属性。

这个检查必须紧跟该类型额外的检查:

​​

可以肯定,这是一个功能。

0

如果你只是想避免错误,可以转败为胜:

try{function2call();} 
catch(e){alert('function2call() doesn\'t exist');} 
相关问题