c语言编程笔录

首页 >   > 笔记大全

笔记大全

javascript怎么获取当前方法名

更新时间:2023-10-09

段落一

JavaScript 是一种灵活的动态语言,可以通过一些技巧在运行时获取当前的方法名。在 JavaScript 中,每个函数都是对象。方法名是函数对象的一个属性,因此可以通过函数对象来获取方法名。


function functionName() {
  console.log(arguments.callee.name);
}
functionName();

在这个示例代码中,arguments.callee是一个指向当前函数的引用,而arguments.callee.name返回函数的名称,即当前方法名。这种方法可以用于获取函数的名称,但是它存在一些限制。例如,如果启用了严格模式,这种方法将不再有效。

段落二

对于 ES6 之前的 JavaScript,可以使用堆栈来获取当前方法名。当函数调用一个函数时,它将其调用信息压入堆栈。可以通过访问堆栈来获取到当前调用的方法名。


function functionName() {
  return new Error().stack.match(/function ([^\(]+)/)[1];
}
console.log(functionName());

上面的代码中,我们首先创建一个错误并获取堆栈跟踪信息,然后使用正则表达式匹配函数名称。这种方法可以用于获取函数名称,并且可以在严格模式下使用。

段落三

对于 ES6 及其之后的版本,使用Function.prototype.name属性获取当前方法名。这个属性返回一个函数的名称,如果函数没有名称,则返回空字符串。使用这种方法,可以获取到匿名函数的名称。


const functionName = function() {
  console.log(functionName.name);
};
functionName();

在这个示例代码中,functionName.name返回函数的名称。如果函数没有名称,则返回空字符串。这种方法可以用于获取函数名称,并且可以在严格模式下使用。

段落四

在某些情况下,使用堆栈跟踪信息来获取当前方法名可能不是最佳选择。例如,当代码运行在代理、装饰器、Web Worker 等环境中时,堆栈可能会受到限制。在这种情况下,可以使用符号,该符号可以与方法相关联,并在需要时获取该符号的名称。


const methodName = Symbol('methodName');
const obj = {
  [methodName]() {
    console.log(methodName.toString().substring(7, methodName.toString().length - 1));
  }
};
obj[methodName]();

在这个示例代码中,我们首先创建一个符号,在对象中定义一个方法,并使用该符号作为方法名。在方法中,我们获取符号的名称以获取方法名。这种方法可以用于在需要时获取方法名,并且不受堆栈跟踪信息的限制。