私は現在、JavaScript 関数をprivateとして保護する方法を研究しています。呼び出し元が無効な場合、例外がスローされます。次に、ここで問題があります。クロージャーが有効な呼び出し元の内部で定義されている場合、それは内側のクロージャーから有効な呼び出し元を取得する方法ですか?
例えば:
function validCaller() {
var self = this;
self.privateFunction1();
$.each([/*...*/], function (key, val) {
self.privateFunction2();
});
}
もちろん、privateFunction1
呼び出し元validCaller
を正しくprivateFunction2
取得しますが、匿名関数を呼び出し元として取得するため、アクセスは拒否されます。
式 によってコール スタックから validCaller を取得するのは正しい方法ではありません。caller.caller.caller
トレース バックする必要があるレベル数を判断できないためです。また、いくつかの特別なケースでは、無名関数を の外で呼び出す必要がありvalidCaller
ます。
複雑な方法で質問したのかもしれませんが、簡単な方法は次のとおりです。
関数のスコープ チェーンをキャプチャするにはどうすればよいですか?