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、そのプロパティの 1 つの値として設定する必要があります。

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/

ただし、フィドルのオプションにある「 No wrap - in <body> 」に注意してください。コード内で他のスコープ オブジェクトにアクセスできないため、これはグローバルに対してのみ機能します。

于 2013-06-17T02:29:01.663 に答える