web-dev-qa-db-ja.com

JavaScript関数内で関数の名前を取得するにはどうすればよいですか?

私がいる関数の名前をどのように知ることができますか?

以下のコードは「オブジェクト」に警告します。しかし、私は「アウター」に警告する方法を知る必要があります。

function Outer(){

    alert(typeof this);

}
27
pencilCake

私はあなたがそれを行うことができると思います:

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();
}
16
marcgg

これは機能します:

function test() {
  var z = arguments.callee.name;
  console.log(z);
}
28
yannis

ES6以降、次を使用できます Function.prototype.name 。これには、独自の引数オブ​​ジェクトがないため、矢印関数を操作するという追加の利点があります。

function logFuncName() {
  console.log(logFuncName.name);
}

const logFuncName2 = () => {
  console.log(logFuncName2.name);
};
4
jabacchetta