簡體   English   中英

如何確定javascript中引用了哪個函數?

[英]How can I figure out which function is being referenced in javascript?

我正在使用一些JS,其中的函數是通過引用傳遞的,很難看到有時會調用哪個函數。 它將通過具有大量參數的7-8個函數進行傳遞,因此回溯它的來源非常耗時。 我正在努力對此進行一些更改,但是我能夠弄清楚實際上是在調用哪個函數的唯一方法是執行以下操作:

        if (console && console.log && method.toSource) {
            console.log(method.toSource());
        }

這僅在FF中有效,但是至少我可以搜索被調用函數的源。 有沒有更好的辦法?

嘗試這個

var whee = {
    test: function(ab) {
        console.log(ab);
        this.test2('Hello', 'World');
    },

    test2: function(a, b) {
        console.log(a+' '+b);
    }
};

function augment(obj, withFn) {
    var name, fn;
    for (name in obj) {
        fn = obj[name];
        if (typeof fn === 'function') {
            obj[name] = (function(name, fn) {
                var args = arguments;
                return function() {
                    withFn.apply(this, args);
                    fn.apply(this, arguments);
                }
            })(name, fn);
        }
    }
}

augment(whee, function(name, fn) {
    console.log("calling " + name);
});

whee.test('hi');

函數擴充將obj作為第一個參數,將函數作為第二個參數。 它遍歷對象的所有成員以查找功能。 當找到一個函數時,它將替換為一個函數,該函數先調用傳入的函數,然后調用原始函數。 我從這個stackoverflow答案中偷走了幾乎所有代碼。

當您將其傳遞給window對象時,它似乎不能很好地播放,因此希望您的函數不會在window范圍內全部聲明。

還有這個答案中,他們試圖超越自己的Function.prototype.call功能。 我無法在Firefox中運行它,但也許您會遇到好運。

安裝Firefox
安裝firebug插件
點擊右下角的錯誤圖標
單擊腳本選項卡
點擊啟用
重新載入頁面
單擊螢火蟲右側面板上的堆棧選項卡

您是否在Firebug中嘗試過console.trace()

函數可以通過引用進行比較,因此,如果您有一個字典,例如Alex Brown的答案:

var whee = {
    test: function(ab) {
        console.log(ab);
        this.test2('Hello', 'World');
    },

    test2: function(a, b) {
        console.log(a+' '+b);
    }
};

那么您只需將您現在匿名的參考與每個參考進行比較:

function whichFunc(func, funcDict) {
    for (var funcname in funcDict) {
        if (func == funcDict[funcname]) {
            return funcname;
        }
    }
}

很簡單

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM