2011-09-26 18 views
23

我有我的网站的脚本调用时调用一个静态命名函数:确定是否静态命名的JavaScript函数的存在是为了防止错误

childLoad(); 

childLoad()函数并不总是定义,虽然它总是叫。如果脚本不存在,我怎么能阻止脚本调​​用这个函数?

+1

可能重复的[确实的对象/函数存在?](http://stackoverflow.com/questions/5848700/does-an-object-function-exists) –

+0

@AndreasNiedermair否,在技术上每个问题是相同的一般场景,但是上下文是这个问题是关于一个*静态*命名的函数,它在你引用的问题是查询一个*动态*命名函数时永远不会改变。 – John

回答

11

你可以使用短路评价:

childLoad && childLoad(); 


编辑

('childLoad' in this) && childLoad && childLoad(); 

这将确保childLoad可以参考,可以确保它不是不确定的,则调用该函数。它不检查以确定它是一个功能,但我个人觉得这是不需要的。

注意:如果您使用的是callapply,则this可能不是您所指的上下文。这真的取决于你的其他代码。

+6

不错而且很短,但如果有一个名为childLoad的变量(但不是称为childLoad的函数)会失败。 –

+2

那么,如果'childLoad'没有**定义**(例如它之前没有声明),这将产生一个'ReferenceError',因为标识符不在范围链上... – CMS

+0

@JacobM,将100%为真,它应该失败,因为它是一个功能。所以会有很大的问题。 – Joe

1

你可以简单地检查:

if (childLoad) 
    childLoad() 
+0

在Chrome中失败。 typeof方法有效\ –

55
if (typeof childLoad == 'function') { 
    childLoad(); 
} 
5
if(typeof childLoad == 'function') { 
    childLoad(); 
} 
0

你可以围绕着它在尝试捕捉!

0
<script> 
/* yourfunction */ 
if(typeof yourfunction == 'function') { 
    yourfunction(); 
} 
function yourfunction(){ 
    //function code 
} 
</script> 
+0

尽管此代码可能回答此问题,但提供 有关_why_和/或_how_此代码的其他上下文 回答此问题将显着改善其 的长期价值。请[编辑]你的答案,添加一些 的解释。 –

相关问题