如何学习当前函数的名称?
以下代码会弹出'Object'。但我需要知道如何弹出"Outer."。
function Outer(){
alert(typeof this);
}
如何学习当前函数的名称?
以下代码会弹出'Object'。但我需要知道如何弹出"Outer."。
function Outer(){
alert(typeof this);
}
这样做是可行的:
function test() {
var z = arguments.callee.name;
console.log(z);
}
我认为你可以这样做:
var name = arguments.callee.toString();
如果想了解更多信息,请查看这篇文章。
function callTaker(a,b,c,d,e){
// arguments properties
console.log(arguments);
console.log(arguments.length);
console.log(arguments.callee);
console.log(arguments[1]);
// Function properties
console.log(callTaker.length);
console.log(callTaker.caller);
console.log(arguments.callee.caller);
console.log(arguments.callee.caller.caller);
console.log(callTaker.name);
console.log(callTaker.constructor);
}
function callMaker(){
callTaker("foo","bar",this,document);
}
function init(){
callMaker();
}
arguments.callee
不仅已被弃用。当启用严格模式时,访问它会导致TypeError。 - bryantsai从ES6开始,你可以使用Function.prototype.name
。这样做的好处是它可以与箭头函数一起使用,因为它们没有自己的arguments对象。
function logFuncName() {
console.log(logFuncName.name);
}
const logFuncName2 = () => {
console.log(logFuncName2.name);
};
function.name
或者 [this.function].name
这样的形式。 - Eagle_花了我一段时间才想明白这个问题,因此我尝试让它对像我这样的新手更加清晰易懂。
这种方法以前可以使用,但是在ES6严格模式下将失败。 不要使用方法1。
//approach 1 - don't use
let functionName = arguments.callee.name;
console.log(functionName);
这种方法在最新版本的JavaScript中有效,并且不会在严格模式下失败。请使用方法二,包括两个步骤:
第一步 - 创建一个函数,使用caller.name返回调用它的函数的名称。将此函数添加到您的代码中:
function getFuncName() {
return getFuncName.caller.name
}
function iWantThisName() {
console.log(getFuncName())
}
iWantThisName()
// Logs: "iWantThisName"
TypeError: 'caller'、'callee' 和 'arguments' 属性不能在严格模式函数或调用它们的参数对象上访问
出了什么问题?请参见 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage - LeMoussel
window[window.prompt('函数名称:', '')] = function(){ alert(arguments.callee.name); };
- Boldewyn