2016-10-28 5 views
3

Например, с помощью инструментов отладки исследователя я остановился внутри некоторой функции, используя точку останова (например, «DevTools» в Chrome).Javascript function полный путь

Возможно ли узнать полный путь от этого контекста функции до глобального контекста (window объект)?

Как:

window.***.***.***.***.CustomFunction() 

Возможно ли это?

+8

В общем, ** нет **. Функция не может быть связана как прямое или косвенное значение свойства 'window'. – Pointy

+0

Вы можете сделать глубокий поиск, чтобы найти 'CustomFunction()' '' '' this' в 'window' ... –

+0

Что бы вы сделали с этой информацией, если бы у вас было это? –

ответ

2

Можно ли знать полный путь от этой функции контекста до глобального контекста (объект окна)?

Если выполнение функции не начинается с window контекста (например, функция вызывается внутри крышки), то нет, полный путь его контекста никогда не достигнет window.

Как уже отмечался в комментариях, вам лучше всего использовать Call Stack панели в сочетании с Scope панели, в разделе Sources ваших Девых инструментов.

Вы получите буквально любую информацию, которую вы когда-либо захотите, о конкретном шаге в callstack; как это вызвано, вплоть до самого первого триггера, и вы можете проверить все его области действия и какие переменные и функции, которые он использует из каждой области.

Call stack

Вы можете даже проследить стек от асинхронных вызовов, включив параметр async. Это здорово.

enter image description here

0

Вы можете получить нужную информацию, если не в том точном формате, используя stacktrace.js. Вот работающий jsfiddle, с кодом ниже. Вам нужно будет открыть консоль, чтобы увидеть результат. (Вы можете игнорировать ошибку XMLHttpRequest, которую вы увидите на jsfiddle, пример все еще работает там. Если кто знает, как это исправить, сообщите мне).

var callback = function(stackframes) { 
    var stringifiedStack = stackframes.map(function(sf) { 
     return sf.toString(); 
    }).join('\n'); 
    console.log(stringifiedStack); 
}; 

var foo = function() { 
    var bar = function barFunction (fn) { 
    console.log('I am bar'); 
    fn.call(); 
    }; 

    return { 
    bar: bar 
    }; 
}; 

var baz = function bazFunction() { 
    console.log('I am baz'); 
    StackTrace.get().then(callback); 
}; 

var test = foo(); 
test.bar(baz);