检查javascript函数是否存在变量并执行它

问题描述:

我的项目中有一个弹出系统。通过名称,例如“addnews”,它知道要添加哪个弹出内容以及处理表单所需的脚本。直到现在完成后,我总是做同样的事情。现在,在某些情况下,我想要做一些不同的事情。检查javascript函数是否存在变量并执行它

现在我想添加一个与前面的例子'addnews()'相同名称的JavaScript函数,并检查该函数是否存在。如果它运行它,否则做标准的事情。 (1)

同时执行一个名称为变量的函数似乎不起作用。 (2)

var functionName = 'addnews'; 

if (typeof functionName == 'function') { // (1) typeof functionName = string 
    window[functionName](); // (2) this doesn't work for me 
} else { 
    // Do something standard 
} 

function addnews() { 
    // Do something special 
} 
+0

我不太清楚你想达到的目标。为什么你必须测试一个函数是否存在?你试图解决的问题是什么? *“在完成之后,我总是做同样的事情,现在,在某些情况下,我想做一些不同的事情。”*我想这是你的核心问题,但为了正确地帮助你,你必须详细说明这一点。 – 2013-02-10 00:13:45

如果您在文档中使用此代码并且未加载complielly,则代码将无法找到addnews()函数,因为它在此代码之前未声明。

像评论:你需要使用

if (typeof window[functionName] == 'function') 
+0

这不是问题所在。 – 2013-02-10 00:20:35

+0

你知道他的完整代码吗? :)我在一些项目中也使用这个代码,它工作正常。 – Mic 2013-02-10 00:22:35

+0

'typeof functionName'总是一个字符串。 – 2013-02-10 00:23:28

这将做到这一点:

if (typeof eval(functionName) == 'function') { 
    eval(functionName+'()'); 
} else { 
    // Do something standard 
} 

更新:只有当话筒不工作的答案(whyever)使用。就像他说的,eval是非常危险的。

+1

只有当输入可能来自不同于用户或网站本身的来源(例如来自其他用户的输入)时,“eval”才是危险的。除了潜在的危险之外,使用它只会导致更难维护代码和(可能不必要的)性能开销。 – 2013-02-10 01:22:09