4

arguments.callee.callerJavaScript で呼び出し元関数を見つけるにはどうすればよいですか? のように使用して、Google Apps Script 関数を呼び出した関数の名前を見つけようとしています。、しかし、エクスポートされたそのようなプロパティはないようです。(ただし、arguments.callee存在します。)

Google Apps Script でその呼び出し関数の名前を取得するにはどうすればよいですか?

二次的な質問として、なぜarguments.callee.callerそこにないのですか?

4

4 に答える 4

4

私はこの機能を作りました:

function getCaller()
{
  var stack;
  var ret = "";
    try 
    {
      throw new Error("Whoops!");
    } 
    catch (e) 
    {
      stack = e.stack;
    }
    finally
    {
      var matchArr = stack.match(/\(.*\)/g);
      if (matchArr.length > 2)
      {
        tmp = matchArr[2];
        ret = tmp.slice(1, tmp.length - 1) + "()";
      }
      return ret;
    }
}

Error() としてスローし、スタック トレースから関数名を取得します。ラッパーを使用する場合は、matchArr[2] の「2」を変更してみてください。

于 2016-03-08T18:15:59.073 に答える
1

caller は JavaScript の非標準拡張機能であり (つまり、多くのブラウザにはありますが、EcmaScript 標準の一部ではありません)、Apps Script には実装されていません。

于 2013-02-06T13:32:02.083 に答える
0

jgrotius の回答に基づいてコール スタックを取得する関数を作成しました。

  function getCallStack()
  {
    var returnValue = "";
    var framePattern = /\sat (.+?):(\d+) \((.+?)\)/;
    try 
    {
      throw new Error('');
    } 
    catch (e) 
    {
      returnValue = e.stack
      .split('\n')
      .filter(function(frame, index) {
        return !frame.isBlank() && index > 0;
      })
      // at app/lib/debug:21 (getCaller)
      .map(function(frame) {
        var parts = frame.match(framePattern);
        return {
          file: parts[1],
          line: parseInt(parts[2]),
          func: parts[3]
        };
      });
    }
    return returnValue;
  }  
于 2020-02-08T17:50:44.840 に答える