簡體   English   中英

揭示類模式與原型方法?

[英]Revealing class pattern vs prototype method?

我已經看到了揭示性的模塊模式以及原型類模式。 我有點把兩者結合在一起,形成了一個生動的課堂模式。 我試圖找出是否有這種模式的陷阱,或者是行不通的事情。 只要對象的構造函數是typeof“ function”,我認為就不會有任何問題。

我唯一需要注意的是,高容量的實例化類,每次創建新類時都會創建私有函數。 這可能會導致數千個實例的內存問題。 但是,對於沒有在內存中建立的較大類,我的想法是更容易讀取代碼,而安全性可能會有所幫助。 通過使功能保持私密並公開它們,混淆器將所有內部功能減至最少,從而難以窺視。 當然,它不是萬無一失的,而只是一個額外的保護層。 此外,能夠私下在函數內部工作,從而消除了類中數百次“ this”的出現。 也許這是一個很小的優勢,但是對於復雜的代碼,它可以提高可讀性。 有人看到該模式有任何重大問題嗎?

//standard pattern

var MyClass = function() {
    this.func1 = function() {
        //dostuff
    };
};
MyClass.prototype.func2 = function() {
    this.func1();
    //dostuff
};

--

//revealing class pattern

var MyClass = function() {
    function privateFunc() {
        //dostuff
    }

    function publicFunc() {
        privateFunc();
        //dostuff
    }

    this.publicFunc = publicFunc;
};

我已經看到了揭示性的模塊模式以及原型類模式。 我有點把兩者結合在一起,形成了一個生動的課堂模式。

您應該看看揭示原型模式 ,該模式將它們真正結合起來以揭示一個類。 您當前擁有的應該稱為“顯示實例模式”。

有人看到該模式有任何重大問題嗎?

您已經陳述了主要的警告,但是如果您認為值得,那就繼續吧。 鑒於大多數類都沒有大量實例化,因此這實際上不再起作用。

但是,您可以改善模式。 鑒於您不再使用原型,沒有理由保留它。 刪除new運算符,在構造函數中使用this關鍵字刪除,然后返回對象文字。 Voilá,您具有出廠功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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