1

関数内で関数の名前を取得するには、次のコードを使用できます。

function getmyname() {
    var myName = arguments.callee.toString();
    myName = myName.substr('function '.length);
    myName = myName.substr(0, myName.indexOf('('));
    alert(myName); // getmyname
}

ただし、これを何度も実行する必要があるため、それを行う関数を使用したいので、次のようになります。

function getmyname() {
    alert(getfname()); // getmyname
}

だからgetfname()名前を取得します。これはどのように行うことができますか?

4

2 に答える 2

1

ローカル引数をgetmyname関数に渡してcallee.name、解析の代わりに使用できます。

function getmyname(args) {
    return args.callee.name;
}

function getname() {
    alert(getmyname(arguments));
}

getname();  // "getname"
于 2012-12-07T00:51:41.537 に答える
0

.name関数オブジェクトが持つプロパティです。

function getmyname() {
    return arguments.callee.name;
}

function getname() {
    alert(getmyname());
}

getname(); // alerts "getmyname"

注意事項:

Arguments.callee は、他のプロパティと共に、ECMAscript5 の厳密モードでは廃止され、アクセスするとエラーがスローされます。したがって、getmyname.name を返す必要がありますが、その文字列を直接返すことができるため、明らかにエレガントではありません。

于 2012-12-07T00:50:55.280 に答える