爲了維持一個命名空間的緣故,我有一些代碼看起來是這樣的:提到過「這個」匿名外功能,通過內部函數
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':https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/呼叫。當然,你不能訪問不在範圍內的變量,這是不可能的。 –
'this'的值由如何調用函數決定。爲了我們能夠幫助你,我們需要確切地看到你如何調用你想控制'this'的函數,然後才能提出具體的建議,但是你可能想要按順序使用'.call()'根據需要設置'this'指針。私有變量只能被其代碼實際在變量所在範圍內的函數訪問。如果正確設置了'this',那麼可以很好地訪問實例變量,因此可以使用'this'引用該對象的屬性。 – jfriend00