[英]Passing reference to “this” anonymous outer function to passed inner function
為了維護名稱空間,我有類似以下代碼的代碼:
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
,而不是全局window
匿名功能。
我真正需要的是能夠傳入一個函數並為其提供對我的命名空間函數中的私有變量和函數的完全訪問權限的能力。 有人知道這樣做的好方法嗎?
Javascript使用詞法作用域,即,僅物理上位於外部函數內部的函數才能訪問其作用域( var
)。 無法使外部定義的任何函數都可以訪問該函數的var
。
因此,您唯一的選擇是使“私有”變量成為“受保護”屬性,並將屬性包傳遞給回調:
MyNamespace = function() {
return {
_foo: "something",
_bar: "else",
pubFunc1: function(callback) {
callback(this._foo, this._bar) //or
callback(this)
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.