0
    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 函数中有一个 each 循环。

我想做的是循环遍历 ab 值,并查找是否存在具有其名称的函数。在这种情况下,唯一应该触发的是 'aa',因为函数 'aa 存在。

isfunction 行是否正确?或者 typeof 会起作用吗?

4

1 回答 1

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/

不过,请注意 Fiddle 选项中的“ No wrap - in <body> ”。这仅适用于全局,因为在代码中无法访问其他范围对象。

于 2013-06-17T02:29:01.663 回答