簡體   English   中英

命名空間javascript中的私有函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM