首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JQuery检查变量是否为函数

JQuery检查变量是否为函数
EN

Stack Overflow用户
提问于 2015-09-15 14:11:15
回答 3查看 2.1K关注 0票数 1

如何检查返回变量是否是函数?

代码语言:javascript
复制
var testController = function() {
  alert('123');
}

$(function() {
  $('[mfour]').each(function(e, t) {
    var a = $(t).attr('mfour');
    console.log($.isFunction(testController));
    console.log($.isFunction(a));
  })
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div mfour="testController">asd</div>

注意,在第一个console.log上,如果函数名是硬编码的,则返回TRUE;而在第二个console.log上,如果要计算变量,则返回FALSE。

这有点奇怪,因为var a返回testController

这是jsFiddle

我在这里的目标是在mfour属性的基础上运行某些函数。因此,在上面的示例中,testController将运行testController函数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-15 14:45:58

在您的示例中,要获得对testFunction的引用(如果它在作用域内),可以使用eval。是的,我说了,eval,所以您必须知道,如果您不将字符串用于函数名,用户可以操纵它来运行恶意代码;

代码语言:javascript
复制
var testController = function() {
  alert('123');
}

$(function() {
  $('[mfour]').each(function(e, t) {
    var a = eval($(t).attr('mfour'));
    console.log($.isFunction(testController));
    console.log($.isFunction(a));
  })
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div mfour="testController">Hello</div>

票数 2
EN

Stack Overflow用户

发布于 2015-09-15 14:19:06

尝试使用window[varname] -假设函数在全局范围内

像这样

演示

代码语言:javascript
复制
var testController = function() {
    alert('123');
}

$(function() {
    $('[mfour]').each(function(e, t) {
        var a = $(t).attr('mfour');
        console.log($.isFunction(testController));
        console.log($.isFunction(window[a]));
        console.log(typeof window[a] === "function");
    })
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div mfour="testController">Hello</div>

票数 2
EN

Stack Overflow用户

发布于 2015-09-15 14:23:32

若要检查变量是否为函数,只需添加检查即可。

代码语言:javascript
复制
typeof variableName

它将返回变量的类型。

哥们..。

如果可能,将函数添加到对象中。就像下面

代码语言:javascript
复制
var obj = {
    testController: function(){
       alert('123');
    }
};

    $(function() {
        $('[mfour]').each(function(e, t) {
            var a = $(t).attr('mfour');
            console.log($.isFunction(obj[a]));
        })
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32588319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档