如果您需要这样做,并且需要在全局严格中进行,并且您不想对名称进行硬编码:
function args(arg){
var me;
try{ badCAll654(); }catch(y){ me=String(y.stack).split("args")[1].split("\n")[1].trim().split("@")[0].replace(/^at /,"").split(" ")[0].trim() }
return me +"("+[].slice.call(arg).join(", ")+")";
}
function getOwnFunctionCall() {
"use strict";
return args(arguments);
}
getOwnFunctionCall(1,true, /dd/);
这可能是一个很好的调试工具,但我不建议在生产站点/应用程序上使用它;它会对性能产生相当大的影响。此模式仅适用于 chrome 和 firefox,但适用于全局“使用严格”。
IE9 不那么严格,因此您可以执行以下操作:
function args(arg){
var me=arg.callee+'';
return me.split("(")[0].split("function")[1].trim() +"("+[].slice.call(arg).join(", ")+")";
}
function getOwnFunctionCall() {
"use strict";
return args(arguments);
}
getOwnFunctionCall(1,true, /dd/);
如果你填充 trim()s,它也应该在 IE8 中工作。如果你不使用严格,你可以做更酷的事情,比如记录调用被记录函数的函数。如果您想要参数的名称而不仅仅是值,您甚至可以撕掉该函数的源代码以查找对记录函数的调用。复杂且毫无价值,但可能。
再说一次,你真的应该只将它用于调试!