#фишка дня
Как узнать, откуда была вызвана интересующая нас функция?
Правильный ответ — воспользоваться дебаггером.
Или console.trace().
Но это не всегда приемлемо. Мне вот нужно было иметь в логах название источника либо часть трассировки.
Если не используется ‘use strict’ (почему, кстати?) можно воспользоваться нестандартным свойством Function.caller:
…или устаревшим arguments.callee.caller
Но это не выведет весь стек и вообще в нормальном коде не сработает. Поэтому, можно красиво схитрить сымытировав ошибку:
Тоже нестандартно, зато как красиво. Оттуда уже можно и имя первого родителя вытащить регуляркой.
#js #caller #error #stack
Как узнать, откуда была вызвана интересующая нас функция?
Правильный ответ — воспользоваться дебаггером.
Или console.trace().
Но это не всегда приемлемо. Мне вот нужно было иметь в логах название источника либо часть трассировки.
Если не используется ‘use strict’ (почему, кстати?) можно воспользоваться нестандартным свойством Function.caller:
function hello() {
console.log(“caller is " + hello.caller);
}
…или устаревшим arguments.callee.caller
function hello() {
console.log(“caller is " + arguments.callee.caller.toString());
}
Но это не выведет весь стек и вообще в нормальном коде не сработает. Поэтому, можно красиво схитрить сымытировав ошибку:
function Hello() {
console.log(“caller stack”, new Error().stack);
}
Тоже нестандартно, зато как красиво. Оттуда уже можно и имя первого родителя вытащить регуляркой.
#js #caller #error #stack
#фишка дня
Как узнать, откуда была вызвана интересующая нас функция?
Правильный ответ — воспользоваться дебаггером.
Или console.trace().
Но это не всегда приемлемо. Мне вот нужно было иметь в логах название источника либо часть трассировки.
Если не используется ‘use strict’ (почему, кстати?) можно воспользоваться нестандартным свойством Function.caller:
…или устаревшим arguments.callee.caller
Но это не выведет весь стек и вообще в нормальном коде не сработает. Поэтому, можно красиво схитрить сымытировав ошибку:
Тоже нестандартно, зато как красиво. Оттуда уже можно и имя первого родителя вытащить регуляркой.
#js #caller #error #stack #бородач
Как узнать, откуда была вызвана интересующая нас функция?
Правильный ответ — воспользоваться дебаггером.
Или console.trace().
Но это не всегда приемлемо. Мне вот нужно было иметь в логах название источника либо часть трассировки.
Если не используется ‘use strict’ (почему, кстати?) можно воспользоваться нестандартным свойством Function.caller:
function hello() {
console.log(“caller is " + hello.caller);
}
…или устаревшим arguments.callee.caller
function hello() {
console.log(“caller is " + arguments.callee.caller.toString());
}
Но это не выведет весь стек и вообще в нормальном коде не сработает. Поэтому, можно красиво схитрить сымытировав ошибку:
function Hello() {
console.log(“caller stack”, new Error().stack);
}
Тоже нестандартно, зато как красиво. Оттуда уже можно и имя первого родителя вытащить регуляркой.
#js #caller #error #stack #бородач