我目前正在研究一种将 JavaScript 函数保护为private的方法,如果调用者无效,则会引发异常。那么我这里有一个问题:如果在有效调用者内部定义了一个闭包,是否可以从内部闭包中获取有效调用者?
例如:
function validCaller() {
var self = this;
self.privateFunction1();
$.each([/*...*/], function (key, val) {
self.privateFunction2();
});
}
而且,当然privateFunction1
会正确获取调用者validCaller
,但privateFunction2
会获取匿名函数作为调用者,因此访问将被拒绝。
如果我通过表达式从调用堆栈中获取validCaller,这不是正确的方法caller.caller.caller
,因为我无法确定我应该回溯多少级,并且在某些特殊情况下,匿名函数需要在validCaller
.
也许我用复杂的方式问了这个问题,简单的方法是:
如何捕获函数的作用域链?