在代码中是否可以访问Google Chrome开发人员工具在使用控制台日志功能时显示的["[[FunctionLocation]]"]
属性?
答案 0 :(得分:24)
目前,答案是否。
您在Inspector中看到的[[FunctionLocation]]
属性将添加到调试器的C ++代码V8Debugger::internalProperties()
中,该代码使用另一个C ++函数V8Debugger::functionLocation()
来收集有关该函数的信息。 functionLocation()
然后使用许多特定于V8的C ++ API(例如v8::Function::GetScriptLineNumber()
and GetScriptColumnNumber()
)来查找确切信息。
上述所有API仅适用于C ++代码,而不适用于JavaScript代码。如果您尝试在Node.js这样的平台上完成此任务,那么您应该能够编写本机模块。如果没有,那你就不走运了。
答案 1 :(得分:3)
我知道这个问题已经发布了一段时间。现在,我遇到了同样的问题。我需要在运行时访问函数位置。
幸运的是,NodeJS在inspector
模块中公开了一些v8内部属性,因此表现出色。
我编写了一个名为func-loc
的小模块,该模块有助于在运行时检索函数位置。
示例:
const { locate } = require('func-loc');
const fn = () => {
console.log('Hello there');
};
(async () => {
const result = await locate(fn);
console.log(result);
// Will result: { source: 'file://__BASE_FOLDER__/func-loc/this-file.js', line: 3, column: 12 }
})();
希望有帮助。
答案 2 :(得分:0)
console.log可以使用limited language support在Chrome中显示功能名称。
我发现函数名在调试回调和使用observer pattern时很有用。请注意,这需要命名函数才能工作(匿名函数名称显然是空白的)。
function myFn() {}
if (typeof myFn === 'function') {
console.log('Name of function', myFn.name)
}
输出Name of function myFn