Chrome的开发者工具很棒,但有一件事他们似乎没有(我能找到的),那就是找到JavaScript函数定义的方法。这对我来说非常方便,因为我正在一个包含许多外部JS文件的网站上工作。当然,grep解决了这个问题,但在浏览器中会更好。我的意思是,浏览器必须知道这个,所以为什么不公开它呢?我所期待的是:
首先,这个功能是否存在,而我只是错过了它?
如果它没有,我猜这将来自WebKit,但找不到任何开发人员工具功能请求或WebKit的Bugzilla。
您可以通过在控制台中计算函数的名称来打印该函数,如下所示
> unknownFunc function unknownFunc(unknown) { alert('unknown seems to be ' + unknown); }
这对内置函数不起作用,它们只会显示[native code]而不是源代码。
[native code]
编辑:这意味着函数已经在当前作用域内定义。
假设我们正在寻找名为foo的函数:
foo
foo\s*=\s*function
foo = function
函数定义的另一个变体是function\s*foo\s*\(,用于function foo(,在这三个标记之间有任意数量的空格。
function\s*foo\s*\(
function foo(
这登陆Chrome 2012-08-26 不确定确切的版本,我注意到它在Chrome 24.
一张截图值一百万字:
.
我正在检查一个对象的方法在控制台中。点击“显示函数定义”将我带到源代码中定义函数的地方。或者我可以将鼠标悬停在function () {单词上,在工具提示中查看函数体。你可以像这样轻松地检查整个原型链!CDT绝对摇滚!!
function () {
希望对大家有帮助!
导航到函数定义位置的另一种方法是在调试器中中断,您可以在控制台中访问函数并输入函数的完全限定名。这将在控制台中打印函数定义,并给出一个链接,单击该链接将打开函数定义的脚本位置。
< img src = " https://i.imgur.com/qkIH4WZ.png " alt = " " >
不同的浏览器有不同的操作方式。
首先通过右键单击页面并选择“Inspect Element”打开控制台窗口,或者通过点击F12。
在控制台,输入…
functionName.toSource()
Chrome
functionName
2016年更新:在Chrome版本51.0.2704.103
有一个Go to member快捷方式(在settings > shortcut > Text Editor中列出)。打开包含你的函数的文件(在DevTools的sources面板中),然后按:
Go to member
settings > shortcut > Text Editor
sources
__abc0 + __abc1 + __abc2
或者在OS X中:
这样就可以列出和访问当前文件的成员。
我发现找到全局函数的最快方法很简单:
在Chrome控制台:
debug(MyFunction) MyFunction()
在谷歌chrome,检查元素工具,你可以查看任何Javascript函数定义。
如果你已经在调试,你可以将鼠标悬停在函数上和工具提示将允许你直接导航到函数定义:
进一步的阅读:
我在查找对象方法的源时遇到了类似的问题。对象名称为myTree,方法为load。我在调用方法的行上设置了断点。通过重新加载页面,执行将在该点停止。然后在DevTools控制台中,我输入对象和方法名,即myTree.load,然后按Enter。该方法的定义被打印在控制台上:
myTree
load
myTree.load
此外,通过右键单击定义,你可以在源代码中找到它的定义:
window.P.execute
>window.P.execute.toString() <'function(d,h){function n(){var a=null;e?a=h:"function"===typeof h&&(p.start=w(),a=h.apply(f,wa(d,k,l)),p.end=w());if(b){H[d]=a;a=d;for(da[a]=!0;(z[a]||[]).length;)z[a].shift()();delete z[a]}p.done=!0}var k=g||this;"function"===typeof d&&(h=d,d=E);b&&(d=d?d.replace(ha,""):"__NONAME__",V.hasOwnProperty(d)&&k.error(q(", reregistered by ",q(" by ",d+" already registered",V[d]),k.attribution),d),V[d]=k.attribution);for(var l=[],m=0;m<a.length;m++)l[m]=\na[m].replace(ha,"");var p=B[d||"anon"+ ++xa]={depend:l,registered:w(),namespace:k.namespace};d&&ya.hasOwnProperty(d);c?n():ua(l,k.guardFatal(d,n),d);return{decorate:function(a){U[d]=k.guardFatal(d,a)}}}'
我们得到了完整的函数代码。