40

Get JavaScript function-object from its name as a string?の反対のことをしたいですか?

つまり、次のようになります。

function foo()
{}

function bar(callback)
{
  var name = ???; // how to get "foo" from callback?
}

bar(foo);

参照の背後にある関数の名前を取得するにはどうすればよいですか?

4

8 に答える 8

31

使用できない場合はmyFunction.name、次のことができます。

// Add a new method available on all function values
Function.prototype.getName = function(){
  // Find zero or more non-paren chars after the function start
  return /function ([^(]*)/.exec( this+"" )[1];
};

または、プロパティをサポートしていない最新のブラウザーname(存在しますか?) の場合は、直接追加します。

if (Function.prototype.name === undefined){
  // Add a custom property to all function values
  // that actually invokes a method to get the value
  Object.defineProperty(Function.prototype,'name',{
    get:function(){
      return /function ([^(]*)/.exec( this+"" )[1];
    }
  });
}
于 2012-05-16T18:03:38.537 に答える
19
var name = callback.name;

MDN :

name プロパティは、関数の名前、または無名関数の場合は空の文字列を返します。

ライブデモ

于 2012-05-16T18:01:17.780 に答える
6
function bar(callback){
    var name=callback.toString();
    var reg=/function ([^\(]*)/;
    return reg.exec(name)[1];
}

>>> function foo() { };
>>> bar(foo);
"foo"
>>> bar(function(){});
""
于 2012-05-16T18:09:38.717 に答える
2
var x = function fooBar(){};
console.log(x.name);
// "fooBar"
于 2012-05-16T18:02:59.900 に答える
2

オブジェクトと関数名を次のように抽出できます。

function getFunctionName()
{
    return (new Error()).stack.split('\n')[2].split(' ')[5];
}

例えば:

function MyObject()
{
}

MyObject.prototype.hi = function hi()
{
    console.log(getFunctionName());
};

var myObject = new MyObject();
myObject.hi(); // outputs "MyObject.hi"
于 2014-10-30T12:17:46.047 に答える
1

.nameプロパティへのアクセスを試みます。

callback.name 
于 2012-05-16T18:03:16.270 に答える
0

私にとっては、少し変更するだけで(親の前に\を追加する)、これは機能します:

if (Function.prototype.name === undefined){
  // Add a custom property to all function values
  // that actually invokes a method to get the value
  Object.defineProperty(Function.prototype,'name',{
    get:function(){
      return /function ([^\(]*)/.exec( this+"" )[1];
    }
  });
}
于 2014-11-24T09:12:21.930 に答える
0

特定のオブジェクト イベントで関数を探していた場合、これが役立つ場合があります。

var a = document.form1
a.onsubmit.name
于 2013-04-22T14:32:49.630 に答える