每个循环找到函数是否存在?

时间:2013-06-17 02:19:52

标签: javascript jquery

    var a = {

        b: {
            aa: 'hello',
            bb: 'you',
            cc: 'guys'
            }

    }


    var b = function(){ 

        $.each(a.b, function(x){                

            if( $.isFunction(x) == 'function' ){
                alert(x);
            };

        });

    };

    var aa = function(){
        var dude = 'hi there';
    }

    b();

我在b函数中有一个每个循环。

我想要做的是遍历a.b值,并找出一个函数是否存在它的名字。在这种情况下,唯一应触发的是'aa'作为'aa存在的函数。

isfunction线是否正确?还是会打字?

1 个答案:

答案 0 :(得分:2)

  

在这种情况下,唯一应触发的是'aa'作为'aa存在的函数。

$.each()正在迭代传递给它的Object成员。目前,function aa不是Object a.b的成员。

$.isFunction()未返回true,因为a.b的每个成员都有String值:

aa: 'hello',
bb: 'you',
cc: 'guys'

如果您希望function成为Object的成员,则需要将其设置为其中一个属性的值:

a.b.aa = function () {
    var dude = 'hi there';
};

这会将'hello'值替换为对function

的引用

重用属性名称以查找全局变量,您可以在全局对象(浏览器中为window)上使用它们。

var key = 'aa';
var val = window[key];
var b = function () {
    $.each(a.b, function (key) {
        if (key in window && $.isFunction(window[key])) {
            alert(key + ' is a global function.');
        }
    });
};

示例:http://jsfiddle.net/cAaMf/

尽管如此,请注意小提琴选项中的“无包装< body> ”。这只适用于全局变量,因为在代码中不能访问其他范围对象。