为了维护命名空间,我的代码看起来像这样:
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
function是指全局window
,而不是匿名函数。
我真正需要的是能够传递一个函数并让它完全访问我的命名空间函数中的私有变量和函数。有谁知道这样做的好方法?
答案 0 :(得分:1)
Javascript使用词法作用域,也就是说,只有物理上位于外部函数内的函数才能访问其作用域(var
s)。没有办法使函数var
可以访问外部定义的任何函数。
所以你唯一的选择是将“私有”变量变成“受保护”属性并将属性包传递给回调:
MyNamespace = function() {
return {
_foo: "something",
_bar: "else",
pubFunc1: function(callback) {
callback(this._foo, this._bar) //or
callback(this)
}
}
}