【发布时间】:2014-03-05 16:27:44
【问题描述】:
为了维护命名空间,我的代码如下所示:
MyNamespace = function() {
var foo;
//other private vars
//some private functions
//return certain functions which will be publicly called through MyNamespace
return {
"pubFunc1": function() {/*do stuff*/}
}
}
我希望我的公共函数之一能够将函数作为参数。传入的函数如下所示:
function(state) {
//do something with the passed in state
}
这个函数将被传递给第一个匿名函数。从那里,正如参数所暗示的那样,第一个匿名函数会将其状态(使用this)传递给刚刚传入的函数。我遇到的问题是匿名函数的this 指的是全局window,而不是匿名函数。
我真正需要的是能够传入一个函数,并让它完全访问我的命名空间函数中的私有变量和函数。有谁知道这样做的好方法吗?
【问题讨论】:
-
我不确定你想如何/在哪里调用哪个函数,但如果你想确定
this指的是哪个值,请使用.call或.apply:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。当然,您不能访问不在范围内的变量,这是不可能的。 -
this的值取决于函数的调用方式。为了让我们为您提供帮助,在我们提出具体建议之前,我们需要确切了解您是如何调用要控制this的函数,但您可能需要使用.call()来设置this指针根据需要。私有变量只能被其代码实际上在变量所在范围内的函数访问。如果您正确设置this,则可以很好地访问实例变量,以便可以使用this引用该对象的属性。
标签: javascript function namespaces scope