根据函数名判断函数是否存在

mirrorspace 2017-06-01 10:47:51

如题
知道一个字符串的变量名字.如何判断是否有这个名字的函数呢?

// 这个字符串知道有.是一个变量
var str="getnamebyid";
var isfunname=str;

function getnamebyid()
{}
// 如何判断这个str的函数是否存在?
if( str is functionname)
{
eval(str + '()');
}else{
// 不是函数
}
...全文
271 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mirrorspace 2017-06-01
  • 打赏
  • 举报
回复
引用 3 楼 functionsub 的回复:
如果是在window下面的话,可以通过
typeof window[str] === 'function'
来判断 如果是在一个内部作用域里面,那没什么办法了。 也可以把对应的function放在某个命名空间下:
var nameSpace = {};
nameSpace.getnamebyid = function(){};
var str = 'getnamebyid';
if(typeof nameSpace[str] === 'function'){
    nameSpace[str]()
}
这个跟最上面的原理是一样的,只是一个是你自己定义的命名空间,一个是全局的window对象。
这个可行.不错.! 我的函数都是直接在window下的.没有弄命名空间,原来JS还可以弄命名空间啊..感谢!又学了一招 window[str] 但我发现一个问题.如果这个变量的值和变量名与这个函数名是一样的,它会得出 string的结果 var funname="funname";// 这个变量的值和名字都和下面的函数名一样 alert(typeof window[funname])// 这里弹出 string function funname() {} ---------------------- var funname="funname1";// 这个变量的值和名字都和下面的函数名一样 alert(typeof window[funname])// 这里弹出 function function funname1() {} ---
cn00439805 2017-06-01
  • 打赏
  • 举报
回复
引用 2 楼 mirror030 的回复:
[quote=引用 1 楼 cn00439805 的回复:]

typeof str == "function"
typeof str 得出的结果是 string [/quote] 因为他本来就是string
functionsub 2017-06-01
  • 打赏
  • 举报
回复
如果是在window下面的话,可以通过
typeof window[str] === 'function'
来判断 如果是在一个内部作用域里面,那没什么办法了。 也可以把对应的function放在某个命名空间下:
var nameSpace = {};
nameSpace.getnamebyid = function(){};
var str = 'getnamebyid';
if(typeof nameSpace[str] === 'function'){
    nameSpace[str]()
}
这个跟最上面的原理是一样的,只是一个是你自己定义的命名空间,一个是全局的window对象。
mirrorspace 2017-06-01
  • 打赏
  • 举报
回复
引用 1 楼 cn00439805 的回复:

typeof str == "function"
typeof str 得出的结果是 string
cn00439805 2017-06-01
  • 打赏
  • 举报
回复

typeof str == "function"
天际的海浪 2017-06-01
  • 打赏
  • 举报
回复
引用 5 楼 mirror030 的回复:
[quote=引用 3 楼 functionsub 的回复:] 如果是在window下面的话,可以通过
typeof window[str] === 'function'
来判断 如果是在一个内部作用域里面,那没什么办法了。 也可以把对应的function放在某个命名空间下:
var nameSpace = {};
nameSpace.getnamebyid = function(){};
var str = 'getnamebyid';
if(typeof nameSpace[str] === 'function'){
    nameSpace[str]()
}
这个跟最上面的原理是一样的,只是一个是你自己定义的命名空间,一个是全局的window对象。
这个可行.不错.! 我的函数都是直接在window下的.没有弄命名空间,原来JS还可以弄命名空间啊..感谢!又学了一招 window[str] 但我发现一个问题.如果这个变量的值和变量名与这个函数名是一样的,它会得出 string的结果 var funname="funname";// 这个变量的值和名字都和下面的函数名一样 alert(typeof window[funname])// 这里弹出 string function funname() {} ---------------------- var funname="funname1";// 这个变量的值和名字都和下面的函数名一样 alert(typeof window[funname])// 这里弹出 function function funname1() {} ---[/quote] 因为js的函数名就是变量名,只是变量中的值是一个函数。 如果有变量名与函数名一样,就会被认为是同一个变量。

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧