【发布时间】:2012-07-19 09:12:05
【问题描述】:
我目前正在研究一种将 JavaScript 函数保护为 private 的方法,如果调用者无效,则会引发异常。那么我这里有个问题:如果一个闭包是在一个有效的调用者内部定义的,是不是一种从内部闭包中获取有效调用者的方法?
例如:
function validCaller() {
var self = this;
self.privateFunction1();
$.each([/*...*/], function (key, val) {
self.privateFunction2();
});
}
当然,privateFunction1 会正确获取调用者validCaller,但privateFunction2 会获取匿名函数作为调用者,因此访问将被拒绝。
如果我通过表达式caller.caller.caller从调用堆栈中获取validCaller不是正确的方法,因为我无法确定我应该回溯多少层,并且在某些特殊情况下,匿名函数需要在validCaller之外调用。
也许我用复杂的方式问了这个问题,简单的方式是:
如何捕获函数的作用域链?
【问题讨论】:
-
您应该使用module pattern,而不是重新发明轮子。使用
caller不会成功,因为您可能会遇到一个圈子:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
标签: javascript oop closures callstack scope-chain