[英]Private functions in namespaced javascript
我正在嘗試定義一種方法,通過該方法可以控制對我們在工作中使用的javascript方法的訪問(編碼標准改進驅動器的一部分)。
在我考慮使用第三方腳本方法之前,我打算使用的模式很好。
如何調整我的代碼以允許從jQuery方法內部訪問私有函數?
var NameSpace = new function () {
// My private function I want to access.
var privateFunction = function () {
};
this.publicFunction = function () {
// I can access my private function here.
privateFunction();
jQuery(window).resize(function () {
// But not here :(
privateFunction();
});
};
};
// I can access my private function here.
privateFunction();
jQuery(window).resize(function () {
// But not here :(
privateFunction();
});
是的你可以。 JavaScript是靜態作用域的。 您可以訪問該調整大小的回調中每個封閉作用域的所有變量和函數,包括privateFunction
(只要您沒有通過在嵌套作用域中定義privateFunction
來掩蓋它)。
您不能做的是訪問封閉函數之外的任何局部變量。
我正在嘗試定義一種方法,通過該方法可以控制對我們在工作中使用的javascript方法的訪問(編碼標准改進驅動器的一部分)。
我建議這是沒有意義的練習。
Namespacing可以避免不必要的名稱沖突。 真正的“私有”成員的目的是嚴格執行嚴格的安全邊界。 但這是JavaScript:您不會像在Java中那樣在此處運行具有不同訪問級別和沙箱的代碼。 您不必盲目地在JavaScript中重現Java的安全模型。 誰是這里的“攻擊者”? 你自己 您團隊中的其他編碼員?
數據隱藏和封裝是一種好習慣,但是您無需嚴格強制私有即可實現此目的。 確實,擁有真正的私人用戶可能會使調試和原型制作任務變得更加困難。 考慮一下類似Python的方法,您可以簡單地標記不應從外部使用的成員,例如使用前划線。 任何使用偽私有成員的人都知道他們正在做不應做的事情,並希望有一個很好的臨時理由。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.