2016-09-05 18 views
0
//foo.js 

module.exports.foo = function foo() { 
    // 
} 

// Bar.js 

var f = require(./foo); 

function bar() { 
    f.foo(); // How to find out the caller function is `foo` ? 
} 

の呼び出し元関数をJavaScriptで別のファイルにどのように見つけることができますか?異なるファイルにある呼び出し元関数をどのように見つけ出しますか?

私はthis questionで同様の答えを見ました。

しかし、私は、このログを得た:

debug: caller is function wrapper() { 
    var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; 
    return fn.apply(thisArg, arguments); 
    } 
+2

それは何を全く明らかではありません尋ねる「発信者機能をどのように見つけ出していますか」とはどういう意味ですか? –

+1

私はあなたの質問を正しく理解している場合、答えは "使用しているモジュールのドキュメンテーションを読む"です。 – Quentin

+0

リンクした質問から、 'foo'で' foo'という 'bar'を見つけようとしているようです。それはあなたがやろうとしていることですか? –

答えて

1

私はそれを呼び出しているモジュールからのエラーを記録するために、グローバル関数を書いていますので、ここで私は、呼び出し元関数を見つけるためにしようとしています。

あなたは本当に、私はおそらくErrorstack経由でそれを行うだろうと何をする必要があります場合:

function log() { 
    var stack = new Error().stack; 
    // ...log the stack 
} 

あなたが好きなら、あなたはstack文字列にいくつかの後処理を行うことができ、 V8のドットリリースからドットリリースまで、正確なフォーマットが進化していくので、私はそれを避ける傾向があります(NodeJSを使用しているコードから分かります)。

(またはFirefoxの[NodeJSと同じJavaScriptエンジンを使用しています]クロームのように、Error#stackをサポートしているブラウザが必要です):

function log() { 
 
    console.log(new Error().stack); 
 
} 
 

 
function foo() { 
 
    log(); 
 
} 
 

 
function bar() { 
 
    foo(); 
 
} 
 

 
bar();

+1

@Wongzigii:いいえ、悲しいことに、文字列ですが、まだ標準ではありません。エラースタックトレースへの標準アクセスの話がありましたが、まだありませんし、現在の[提案](https://github.com/tc39/proposals)も見ていません。 –

関連する問題