【问题标题】:trying to pass the name of a function in a variable for if(typeof ...)试图在 if(typeof ...) 的变量中传递函数的名称
【发布时间】:2013-05-21 04:14:15
【问题描述】:

基本上我正在尝试检查函数是否动态存在..

这是我的代码:

var somevar = 'somefunction';

if(typeof somevar === 'function'){
    somefunction();
}

function somefunction(){
   alert('something');
}

上面的代码不起作用

有没有办法实现我想要完成的目标?

【问题讨论】:

  • 是的,我知道它是一个字符串......但在下面它也被定义为你错过了重点的函数......
  • 为什么不检查对函数的引用而不是字符串?
  • 我的意思是,var somevar = somefunction;。
  • 对函数 bfavaretto 的引用是什么意思
  • 我的意思是,你真的需要字符串中的函数名吗?因为如果你使用var somevar = somefunction(注意,没有引号),你的typeof 行就可以了。

标签: javascript function typeof


【解决方案1】:

某种 jsfiddle

var somevar = 'somefunction';

if(isFunction(eval(somevar))){
    eval(somevar+'()');
}

function somefunction(){
   alert('something');
}

function isFunction(x){
    return Object.prototype.toString.call(x) === "[object Function]";
}

【讨论】:

    【解决方案2】:

    试试这个:

    var somevar = 'somefunction';
    
    if(typeof eval(somevar) === 'function'){
        //somefunction();
        eval(somevar+'()');
    }
    
    function somefunction(){
       alert('something');
    }
    

    【讨论】:

    • 非常感谢,这正是我想要的
    【解决方案3】:

    如果函数是全局的,可以通过检查;

    if (typeof window[somevar] === "function") {
    
    }
    

    否则,您只是在检查变量“somevar”的类型(在本例中为字符串)。

    如果它不是全局的,而是存在于某个对象上,您可以将上面示例中的window 替换为存在潜在函数的对象的名称。如果它只是一个非全局范围内的函数,那你就不走运了。

    【讨论】:

    • 不,这不是问题所在。问题是函数是否在 global 范围内?
    • 是的,该函数是全局的,但它与变量有什么关系?
    • @NetaMeta:哈哈,对不起,现在我明白了混乱。我的大脑在想一件事,而我的键盘在输入另一件事。我的回答现在更有意义了吗?
    • 是的,第二个是正确的,但是 window[] 在某种程度上限制了我,我宁愿使用 eval() 来代替我所追求的。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 2012-04-13
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多